96

ABCC_client.store という名前の jks キーストアが提供されています。このキーストアを cacerts にインポートして接続しようとすると、No such Algorithm error と表示されます。スタックトレースの 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/にたどり着きました。キーとキーストア。

4

6 に答える 6

122

Tomcat 6 以前を使用している場合は、キーストアのパスワードとキーのパスワードが同じであることを確認してください。Tomcat 7 以降を使用している場合は、それらが同じであること、またはキーのパスワードがserver.xmlファイルで指定されていることを確認してください。

于 2014-06-01T10:40:49.360 に答える
10

例外が発生しないようにするためにCannot recover key、Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files を、アプリケーションを実行している Java のインストールに適用する必要がありました。これらのファイルのバージョン 8 は、ここで見つけることができます。最新バージョンは、このページにリストされている必要があります。ダウンロードには、ポリシー ファイルの適用方法を説明するファイルが含まれています。


JDK 8u151以降、ポリシー ファイルを追加する必要はありません。代わりに、JCE 管轄ポリシー ファイルは、セキュリティ プロパティによって制御されますcrypto.policy。これを with に設定するunlimitedと、無制限の暗号化を JDK で使用できるようになります。上記の状態にリンクされているリリース ノートのように、ファイルによって、Security.setProperty()またはファイルを介して設定できjava.securityます。ここで詳しく説明されているように、コマンドをjava.security追加してプログラムを開始することにより、ファイルを追加することもできます-Djava.security.properties=my_security.properties


JDK 8u161以降、無制限の暗号化がデフォルトで有効になっています。

于 2016-02-10T13:55:56.553 に答える
0

時々、これは理由もなく起こっているように見えます。私も同じことに直面し、Keytool Explorer などのすべての方法を試しました。

Google Play署名を有効にしていたので、最終的にGoogleにキーのリセットを要求することをやめました. これに従うことをお勧めします。

https://support.google.com/googleplay/android-developer/answer/9842756?hl=ja

于 2021-03-24T15:04:25.327 に答える