2016-10-09 7 views
0

Может ли кто-нибудь, пожалуйста, сообщить мне или очистить мое сомнение, где именно хранилище ключей должно быть размещено во время работы над проектом.Соответствующее местонахождение сберегающего секретного ключа

Я знаю, что java хранит хранилище ключей в secuirty/cancerts & cancerts trutstore & В keystore они предоставили пару ключ-значение для секретного ключа.

Теперь я хочу сохранить свое пользовательское хранилище ключей (в этом хранилище ключей содержится секретный ключ с парой ключ-значение), Итак, где я собираюсь хранить?

это в самом проекте с файлом .keystore, как и с другим файлом .properties? или в любом другом месте?

Нужно ли мне присваивать сертификат для этого хранилища ключей, если да. как я могу прагматично?

ниже код, который генерируется test.keystore в самом проекте ...

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; 
} 

ответ

0

Чтобы быть конкретным, вы ищете место для хранения закрытого ключа, или хранилище ключей?

В любом случае, лучшим местом для их хранения должна быть ваша домашняя папка (по умолчанию созданные в ~/.ssh/on * nix-системах частные ключи). Закрытый ключ/хранилище ключей должен иметь ограничительные разрешения, так что только вы (владелец магазина) получили доступ к нему (On * nix systems, это должно перевести на разрешения 0400).

+0

Спасибо Mahesh ... System.getProperty ("user.home") правильно ??? Просто верните его .. Будет ли система Linux или система Windows не повлиять на эту строку ... right ??? Я имею в виду, что мне не нужно беспокоиться о ОС, когда я помещаю файл в домашний каталог ..... – ashishl

+0

Короткий ответ, да. – Mahesh

+0

Спасибо Mahesh ..... :) – ashishl