我對java密鑰庫和keytool有以下問題。我假設密鑰庫可能有多個證書。正如我已經試過,通過keytool我可以創建一個密鑰庫,並且要訪問這個密鑰庫,我必須設置一個密碼。同樣要訪問每個證書條目,我必須設置密碼。是否必須爲密鑰庫和條目使用相同的密碼?如果沒有(我認爲這是合理的假設)爲什麼是以下代碼:java密鑰庫和密碼設置
char[] pwd = new char[]{'s','e','c','r','e','t'};
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(new FileInputStream("myPersonal.keystore"), pwd);
kmf.init(ks, pwd);//fails here with exception
給我以下例外?
Exception in thread "main" java.security.UnrecoverableKeyException: Cannot recover key
at sun.security.provider.KeyProtector.recover(Unknown Source)
at sun.security.provider.JavaKeyStore.engineGetKey(Unknown Source)
at sun.security.provider.JavaKeyStore$JKS.engineGetKey(Unknown Source)
at java.security.KeyStore.getKey(Unknown Source)
secret
是訪問我通過密鑰工具創建密鑰庫myPersonal.keystore
的密碼。其中有2個條目,用於證書,1個DSA和1個RSA。每個密鑰都與密鑰庫(以及相互之間)有不同的密碼。現在代碼是正確的,因爲如果我使用一個具有與密鑰庫相同密碼的證書條目的密鑰庫,則沒有例外,程序運行良好。
那麼這裏有什麼問題?我不應該有不同的密碼?我不應該有很多證書?或者是什麼?
所以你說這是一個隱含的需求?是否有任何理由在KeyManagerFactory中強制實施此限制?我假設在真實場景中常見的情況是使用不同的密碼 – Cratylus 2011-02-08 08:06:43