2016-10-09 2 views
0

Könnte jemand mich bitte wissen lassen oder meine Zweifel klären, wo genau der Schlüsselspeicher während der Arbeit im Projekt platziert werden sollte.Entsprechender Ort zum Speichern des geheimen Schlüssels

Ich weiß, dass die Java-Keystore in secuirty/cancerts & cancerts ist Trutstore & in Keystore haben sie das Schlüssel-Wert-Paar für geheime Schlüssel zur Verfügung gestellt.

Jetzt möchte ich meinen benutzerdefinierten Keystore speichern (In diesem Keystore enthalten geheime Schlüssel mit Schlüssel-Wert-Paar), Also, wo werde ich speichern?

ist es im Projekt selbst mit der .keystore-Datei wie in einer anderen .properties-Datei ?? oder an einem anderen Ort?

Muss ich ein Zertifikat für diesen Keystore zuweisen, wenn ja. wie kann ich pragmatisch?

unten ist der Code, der test.keystore in Projekt selbst erzeugt wird ...

public static void main(String[] args) throws Exception { 

    String fileWithKeyStore = "test.keystore"; 
    KeyStore keyStore = JKSTest.createKeyStore(fileWithKeyStore, "pwdForKeyStoreFile"); 

    storeKeyInKeyStore(keyStore, fileWithKeyStore); 
    // retriveKeyFromKeyStore(keyStore); 

} 

public static void storeKeyInKeyStore(KeyStore keyStore, String fileWithKeyStore) throws Exception { 

    System.out.println(keyStore.getType()); // JCEKS 

    /** Storing in key value format like map but with password */ 
    SecretKey secretKey = KeyGenerator.getInstance("AES").generateKey(); // JWT-Key 

    keyStore.setEntry("map_key", new KeyStore.SecretKeyEntry(secretKey), 
      new PasswordProtection("pwdForMapEntry".toCharArray())); 

    keyStore.store(new FileOutputStream(fileWithKeyStore), "pwdForStoringFile".toCharArray()); 
    System.out.println("Stored Key:\t" + secretKey); 

} 

public static void retriveKeyFromKeyStore(KeyStore keyStore) 
     throws NoSuchAlgorithmException, UnrecoverableEntryException, KeyStoreException { 

    KeyStore.Entry entry = keyStore.getEntry("map_key", new PasswordProtection("pwdForMapEntry".toCharArray())); 
    SecretKey keyFound = ((KeyStore.SecretKeyEntry) entry).getSecretKey(); 
    System.out.println("Found Key:\t" + keyFound); 

} 


public static KeyStore createKeyStore(String fileName, String pw) throws Exception { 
    File file = new File(fileName); 

    final KeyStore keyStore = KeyStore.getInstance("JCEKS"); 
    if (file.exists()) { 
     // .keystore file already exists => load it 
     keyStore.load(new FileInputStream(file), pw.toCharArray()); 
     System.out.println("Existing .keystore file loaded!"+file.getAbsolutePath()); 
    } else { 
     // .keystore file not created yet => create it 
     keyStore.load(null, null); 
     keyStore.store(new FileOutputStream(fileName), pw.toCharArray()); 
     System.out.println("New .keystore file created!"); 
    } 

    return keyStore; 
} 

Antwort

0

genauer zu sein, werden Sie nach einem Ort suchen, um Ihre privaten Schlüssel zu speichern, oder den Schlüsselspeicher?

In beiden Fällen sollte jedoch der beste Ort zum Speichern dieser Dateien Ihr privater Ordner sein (private Schlüssel werden standardmäßig in ~/.ssh/on * nix-Systemen erstellt). Der private Schlüssel/Keystore muss über restriktive Berechtigungen verfügen, so dass nur Sie (der Besitzer des Stores) Lesezugriff darauf haben (On * nix-Systeme, dies sollte in Berechtigungen 0400 übersetzt werden).

+0

Danke Mahesh ... System.getProperty ("user.home") richtig ?? Nur oben drauf .. Wird das Linux-System oder Windows-System nicht mit dieser Linie auswirken ... richtig ??? Ich meine, ich muss mich nicht um das OS kümmern, wenn ich Datei in Home-Verzeichnis stelle ..... – ashishl

+0

Kurze Antwort, ja. – Mahesh

+0

Danke Mahesh ..... :) – ashishl

Verwandte Themen