Hi all,
while playing with some ssl setups i stumbled upon the following behaviour that
seems like bug to me ?
As long as all keyentries in a keystore have the same password all is fine.
Using entries with different password tomcat doesnt startup.
For testing:
At first create 2 different keystores (same.jks and different.jks) having each
2 entries:
# create 2 entries with same keypass for each entry
keytool -genkeypair -alias tomcat1 -storepass storepass -keystore same.jks
-keyalg RSA -keypass keypass -ext san=dns:tomcat1 -dname CN=tomcat1
keytool -genkeypair -alias tomcat2 -storepass storepass -keystore same.jks
-keyalg RSA -keypass keypass -ext san=dns:tomcat2 -dname CN=tomcat2
# create 2 entries with different keypass for each entry
keytool -genkeypair -alias tomcat1 -storepass storepass -keystore
different.jks -keyalg RSA -keypass tomcat1 -ext san=dns:tomcat1 -dname
CN=tomcat1
keytool -genkeypair -alias tomcat2 -storepass storepass -keystore
different.jks -keyalg RSA -keypass tomcat2 -ext san=dns:tomcat2 -dname
CN=tomcat2
setup a SSL Connector to use that keystore:
<Connector
port="443"
URIEncoding="UTF-8"
scheme="https"
secure="true"
SSLEnabled="true"
>
<SSLHostConfig
ciphers="HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!kRSA"
protocols="all">
<!-- doesn't work, use keypass for alias tomcat2 -->
<Certificate
certificateKeystoreFile="different.jks"
certificateKeystorePassword="storepass"
certificateKeyAlias="tomcat2"
certificateKeystoreType="JKS"
certificateKeyPassword="tomcat2"
type="RSA"
/>
<!-- working config -->
<!--
<Certificate
certificateKeystoreFile="same.jks"
certificateKeystorePassword="storepass"
certificateKeyAlias="tomcat2"
certificateKeystoreType="JKS"
certificateKeyPassword="keypass"
type="RSA"
/>
-->
</SSLHostConfig>
using the config snippet tomcat fails on startup with the following excpetion:
java.lang.IllegalArgumentException: java.security.UnrecoverableKeyException:
Cannot recover key
at
org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:114)
at
org.apache.tomcat.util.net.AbstractJsseEndpoint.initialiseSsl(AbstractJsseEndpoint.java:85)
at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:225)
at
org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:982)
at
org.apache.tomcat.util.net.AbstractJsseEndpoint.init(AbstractJsseEndpoint.java:244)
at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:620)
at
org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11Protocol.java:66)
at
org.apache.catalina.connector.Connector.initInternal(Connector.java:997)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
at
org.apache.catalina.core.StandardService.initInternal(StandardService.java:549)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
at
org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:875)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
at org.apache.catalina.startup.Catalina.load(Catalina.java:607)
at org.apache.catalina.startup.Catalina.load(Catalina.java:630)
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:498)
at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:311)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:494)
Caused by: 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.JSSEUtil.getKeyManagers(JSSEUtil.java:216)
at
org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:112)
... 20 more
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]