2010-06-12 35 views

回答

21

儲存:

KeyStore ks = KeyStore.getInstance("JKS"); 
ks.setKeyEntry("keyAlias", key, passwordForKeyCharArray, certChain); 
OutputStream writeStream = new FileOutputStream(filePathToStore); 
ks.store(writeStream, keystorePasswordCharArray); 
writeStream.close(); 

注泰德certChain可能是空的,除非你是路過PrivateKey

加載:

KeyStore ks = KeyStore.getInstance("JKS"); 
InputStream readStream = new FileInputStream(filePathToStore); 
ks.load(readStream, keystorePasswordCharArray); 
Key key = ks.getKey("keyAlias", passwordForKeyCharArray); 
readStream.close(); 

閱讀javadocs

編輯:

請注意,如果您要存儲SecretKey或使用SunJCE提供程序的任何部分(Java Cryptography Extension),則需要將KeyStore類型設置爲JCEKS。

KeyStore ks = KeyStore.getInstance("JCEKS"); 

如果你解釋如何使用這跟我的SSL/TLS的應用程序(的SSLServerSocketFactory)我會很感激,我需要給它一個CA證書

3

我在那裏我沒有一個局面的路徑不知道密鑰別名,但我知道密鑰庫中只有一個密鑰。我用下面的代碼加載密鑰(加載密鑰庫後如上圖所示):

Enumeration<String> aliases = keyStore.aliases(); 
String alias = aliases.nextElement(); 
KeyStore.PrivateKeyEntry keyEnt = (KeyStore.PrivateKeyEntry) keyStore.getEntry(alias, 
        new KeyStore.PasswordProtection(keystorePass.toCharArray())); 
PrivateKey privateKey = keyEnt.getPrivateKey(); 

我加了post on my blog與如何加載私鑰,公鑰以及如何使用它們的詳細信息。