2017-07-14 14 views
0

Apache Tomcat/7.0.68をサーバー上で実行していて、証明書の更新を自動化しようとしています。TomcatがUnrecoverableKeyExceptionで失敗する:鍵を回復できない

秘密鍵と一緒に証明書がPKCS#12ファイル(PowerShellスクリプトからの抜粋)からのJavaのkeytoolを経由して輸入されています

:私はTomcatを再起動すると、それは次のログ行を吐き出す

& $keytool -importkeystore -srckeystore $certfile -srcstoretype PKCS12 -srcstorepass $srcpassword -srcalias tomcat -keystore $keystore -deststorepass $dstpassword -destalias teamcity -destkeypass $dstpassword -noprompt 

INFO: Initializing ProtocolHandler ["http-nio-443"] 
jul. 14, 2017 5:03:31 PM org.apache.coyote.AbstractProtocol init 
SEVERE: Failed to initialize end point associated with ProtocolHandler ["http-nio-443"] 
java.security.UnrecoverableKeyException: Cannot recover key 
    at sun.security.provider.KeyProtector.recover(KeyProtector.java:328) 
    at sun.security.provider.JavaKeyStore.engineGetKey(JavaKeyStore.java:146) 
    at sun.security.provider.JavaKeyStore$JKS.engineGetKey(JavaKeyStore.java:56) 
    at sun.security.provider.KeyStoreDelegator.engineGetKey(KeyStoreDelegator.java:96) 
    at sun.security.provider.JavaKeyStore$DualFormatJKS.engineGetKey(JavaKeyStore.java:70) 
    at java.security.KeyStore.getKey(KeyStore.java:1023) 
    at sun.security.ssl.SunX509KeyManagerImpl.<init>(SunX509KeyManagerImpl.java:133) 
    at sun.security.ssl.KeyManagerFactoryImpl$SunX509.engineInit(KeyManagerFactoryImpl.java:70) 
    at javax.net.ssl.KeyManagerFactory.init(KeyManagerFactory.java:256) 
    at org.apache.tomcat.util.net.jsse.JSSESocketFactory.getKeyManagers(JSSESocketFactory.java:608) 
    at org.apache.tomcat.util.net.jsse.JSSESocketFactory.getKeyManagers(JSSESocketFactory.java:537) 
    at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:495) 
    at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:650) 
    at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:434) 
    at org.apache.coyote.http11.AbstractHttp11JsseProtocol.init(AbstractHttp11JsseProtocol.java:119) 
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:978) 
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102) 
    at org.apache.catalina.core.StandardService.initInternal(StandardService.java:560) 
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102) 
    at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:820) 
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102) 
    at org.apache.catalina.startup.Catalina.load(Catalina.java:642) 
    at org.apache.catalina.startup.Catalina.load(Catalina.java:667) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:253) 
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:427) 

しかし、私はkeytoolでパスワードを変更しようとすると、細かいエントリを読み取ってパスワードを変更することができます。

PS:エントリのパスワードが店舗のパスワードと同じであることを確認しました。これは、少なくとも一部のバージョンのTomcatがこれを必要としていたからです。

答えて

1

最後に解決しました。 keystoreとは全く別のパスワードを持つキーストアでは、完全に無関係なキーを持つことは、this ancient bug reportで詳しく説明されているように、Tomcatを破壊することが判明しました!

関連する問題