2012-03-18 3 views
5

'storepass'を提供せずにKeyStoreからキーを取得できるかどうかを知る必要があります。ドキュメントhereは、「キーストアから情報を取得する場合、パスワードはオプションです。パスワードが指定されていない場合は、取得した情報の整合性が確認できないと警告が表示されている」と言うKeyStoreパスワードなしのキーを取得

は、しかし、私がしようとすると、パスワードなしでキーを取得する"java.lang.IllegalArgumentException:パスワードはnullにできません"例外。

私は

のkeytool -genseckey -alias "MYKEY" -keystoreたkeystore.jks -storepass "パスワード" -storetype "JCEKS" キーストアを作成する方法です-keyalg AES -keysize 128

そして、私は次の例外をスロー

final KeyStore keyStore = KeyStore.getInstance("JCEKS"); 
keyStore.load(new FileInputStream(new File("C:\\temp\\keytool\\KEYSTORE.jks")), 
    null); 
final Key key = keyStore.getKey("myKey", null); 

を次のようにそれを取得しようとした

java.lang.IllegalArgumentException: password can't be null 
at com.sun.crypto.provider.SunJCE_z.<init>(DashoA13*..) 
at com.sun.crypto.provider.JceKeyStore.engineGetKey(DashoA13*..) 
at java.security.KeyStore.getKey(KeyStore.java:763) 

ドキュメントを完全に誤解しましたか?私は誰もがそれを見ることができる私のコードで 'storepass'を明確に保存することに意味がないので、パスワードを役に立たないようにして、これを回避する方法はありますか?

答えて

4

storepass(秘密鍵にアクセスするために使用されている)が提供されていない場合は、keypassというキーストアのパスワードも使用しようとします。
そのため、例外が発生します。あなたがあなたのリンクから両方keypassstorepassヌル
ことはできません
:-keypassオプションについて

を使用すると、コマンド ラインでオプションを指定しない場合、keytoolは最初に試みます私はDを誤解したのと同様に非公開/秘密鍵を復元 にキーストアのパスワードを使用し、これに失敗した場合、非公開/秘密鍵のパスワード

+0

はいため にあなたを促すメッセージが表示されます、見えますocumentation。それでは、これを回避するために推奨される承認がありますか?私はちょうどそのコードのようなパスワードを持つことはできません。ありがとう – Nishant

+0

あなたの問題は、コード内のハードコードされたパスワードを避けることです?それは最も一般的な問題です。あなたは本当にそれについて多くを行うことはできません。推薦されたアプローチは一般的にユーザーからパスワードを要求しています。あなたは何か精巧なことをすることができますパスワードを暗号化してもそれほど多くは得られません。また、ユーザーに責任を委任することもできます。つまり、ファイルシステムを安全に保つことができます。 – Cratylus

関連する問題