Al configurar el conector Tomcat de Jira para que cifre las comunicaciones, tras reiniciar el servicio, Tomcat dió el siguiente error java.io.IOException: Cannot recover key y el conector no iniciaba.
A continuación el log del Tomcat:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
20-Feb-2017 08:56:48.994 SEVERE [main] org.apache.coyote.AbstractProtocol.init Failed to initialize end point associated with ProtocolHandler ["http-bio-8443"]
java.io.IOException: Cannot recover key
at org.apache.tomcat.util.net.jsse.JSSESocketFactory.init(JSSESocketFactory.java:518)
at sun.security.provider.KeyProtector.recover(KeyProtector.java:328)
... 31 more
20-Feb-2017 08:56:48.997 SEVERE [main] org.apache.catalina.core.StandardService.initInternal Failed to initialize connector [Connector[org.apache.coyote.http11.Http11Protocol-8443]]
org.apache.catalina.LifecycleException: Failed to initialize component [Connector[org.apache.coyote.http11.Http11Protocol-8443]]
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:106)
at sun.security.provider.KeyProtector.recover(KeyProtector.java:328)
... 31 more
Un error de tipo java.io.IOException: Cannot recover key es indicativo de que la contraseña de acceso al certificado albergado en la keystore es distinta a las contraseña de la propia keystore, por lo que Tomcat no puede acceder a dicho certificado.
Solución
Simplemente es necesario cambiar la contraseña del certificado para hacer que coincida con la contraseña de la keystore, esto se puede hacer con keytool: keytool -keypasswd -alias nombre-actual -new KeystorePassword -keystore /path/keystore
-keypasswd, es el comando que permite el cambio de contraseña.
-alias, indica el nombre del certificado sobre el cual se va ha ejecutar el comando.
-new, indica la nueva contraseña de acceso al certificado.