保存密钥的适当位置
Appropriate Location of saving secret key
任何人都可以让我知道或消除我在项目中工作时应该将密钥存储确切放置在哪里的疑问。
我知道 java 在 secuirty/cancerts 中维护密钥库,cancerts 是 trutstore,在密钥库中,他们为密钥提供了键值对。
现在我想存储我的自定义密钥库(在该密钥库中包含密钥和键值对),那么我要存储在哪里?
它是否像其他一些 .properties 文件一样在项目本身中与 .keystore 文件一起使用?或任何其他位置 ??
如果是,我是否需要为该密钥库分配证书。我怎样才能务实 ??
下面是在项目本身中生成的代码 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;
}
具体来说,您是在寻找存储私钥的位置,还是密钥库?
不过,无论哪种情况,存储它们的最佳位置应该是您的主文件夹(默认情况下,私钥在 *nix 系统上的 ~/.ssh/ 中创建)。
私钥/密钥库必须具有限制性权限,只有您(商店的所有者)才能读取它(在 *nix 系统上,这应该转换为权限 0400)。
任何人都可以让我知道或消除我在项目中工作时应该将密钥存储确切放置在哪里的疑问。
我知道 java 在 secuirty/cancerts 中维护密钥库,cancerts 是 trutstore,在密钥库中,他们为密钥提供了键值对。
现在我想存储我的自定义密钥库(在该密钥库中包含密钥和键值对),那么我要存储在哪里?
它是否像其他一些 .properties 文件一样在项目本身中与 .keystore 文件一起使用?或任何其他位置 ??
如果是,我是否需要为该密钥库分配证书。我怎样才能务实 ??
下面是在项目本身中生成的代码 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;
}
具体来说,您是在寻找存储私钥的位置,还是密钥库?
不过,无论哪种情况,存储它们的最佳位置应该是您的主文件夹(默认情况下,私钥在 *nix 系统上的 ~/.ssh/ 中创建)。 私钥/密钥库必须具有限制性权限,只有您(商店的所有者)才能读取它(在 *nix 系统上,这应该转换为权限 0400)。