ABCC_client.storeという名前のjksキーストアが提供されています。このキーストアをcacertsにインポートして接続しようとすると、「No such Algorithm」エラーが表示されます。 PFAスタックトレース
Caused by: Java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.Sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
at Java.security.Provider$Service.newInstance(Provider.Java:1245)
at Sun.security.jca.GetInstance.getInstance(GetInstance.Java:220)
at Sun.security.jca.GetInstance.getInstance(GetInstance.Java:147)
at javax.net.ssl.SSLContext.getInstance(SSLContext.Java:125)
at javax.net.ssl.SSLContext.getDefault(SSLContext.Java:68)
at javax.net.ssl.SSLSocketFactory.getDefault(SSLSocketFactory.Java:102)
at org.Apache.axis.components.net.JSSESocketFactory.initFactory(JSSESocketFactory.Java:61)
at org.Apache.axis.components.net.JSSESocketFactory.create(JSSESocketFactory.Java:79)
... 32 more
Caused by: Java.security.UnrecoverableKeyException: Cannot recover key
at Sun.security.provider.KeyProtector.recover(KeyProtector.Java:311)
at Sun.security.provider.JavaKeyStore.engineGetKey(JavaKeyStore.Java:121)
at Sun.security.provider.JavaKeyStore$JKS.engineGetKey(JavaKeyStore.Java:38)
at Java.security.KeyStore.getKey(KeyStore.Java:763)
at com.Sun.net.ssl.internal.ssl.SunX509KeyManagerImpl.<init>(SunX509KeyManagerImpl.Java:113)
at com.Sun.net.ssl.internal.ssl.KeyManagerFactoryImpl$SunX509.engineInit(KeyManagerFactoryImpl.Java:48)
at javax.net.ssl.KeyManagerFactory.init(KeyManagerFactory.Java:239)
at com.Sun.net.ssl.internal.ssl.DefaultSSLContextImpl.getDefaultKeyManager(DefaultSSLContextImpl.Java:170)
at com.Sun.net.ssl.internal.ssl.DefaultSSLContextImpl.<init>(DefaultSSLContextImpl.Java:40)
at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:39)
at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:27)
at Java.lang.reflect.Constructor.newInstance(Constructor.Java:513)
at Java.lang.Class.newInstance0(Class.Java:355)
at Java.lang.Class.newInstance(Class.Java:308)
at Java.security.Provider$Service.newInstance(Provider.Java:1221)
... 39 more
しかし、このキーストアを個別に使用すると、つまりcacertsに追加せずに機能します。
いくつかのグーグルは私を http://joewlarson.com/blog/2009/03/25/Java-ssl-use-the-same-password-for-keystore-and-key/ に導きましたキーとキーストアでパスワードが異なる場合があると述べています。
Tomcat 6以前を使用している場合は、キーストアパスワードとキーパスワードが同じであることを確認してください。 Tomcat 7以降を使用している場合は、それらが同じであること、またはキーパスワードがserver.xml
ファイルで指定されていることを確認してください。
App/configで定義された秘密キーのパスワードが正しくありません。最初に、次のように別のパスワードに変更して、秘密キーのパスワードを確認してください。
keytool -keypasswd -new changeit -keystore cacerts -storepass changeit -alias someapp -keypass password
上記の例は、パスワードをpasswordからchangeitに変更します。秘密鍵のパスワードがpasswordの場合、このコマンドは成功します。
Cannot recover key
例外を持たないために、アプリケーションを実行していたJavaのインストールにJava Cryptography Extension(JCE)Unlimited Strength Jurisdiction Policy Filesを適用する必要がありました。これらのファイルのバージョン8は here で見つけることができます。または、最新バージョンは このページ にリストされています。ダウンロードには、ポリシーファイルの適用方法を説明するファイルが含まれています。
JDK 8u151 なので、ポリシーファイルを追加する必要はありません。代わりに、JCE管轄ポリシーファイルは、crypto.policy
というセキュリティプロパティによって制御されます。これをunlimited
に設定すると、JDKで無制限の暗号化を使用できます。リリースノートは上記の状態にリンクされているため、 Security.setProperty()
またはJava.security
ファイルで設定できます。 Java.security
ファイルは、プログラムに詳細な here として起動するコマンドに-Djava.security.properties=my_security.properties
を追加することによって追加することもできます。
JDK 8u161 無制限の暗号化がデフォルトで有効になっているため。
64ビットOpenSSLバージョンを使用してビルドされたキーストアにキーをインポートしたときに、同じエラーが発生しました。同じ手順に従って、32ビットOpenSSLバージョンを使用してビルドされたキーストアにキーをインポートすると、すべてがうまくいきました。