Comment résoudre: jno_key_entry
J'ai les fichiers suivants générés par Sectigo:
- XXX1.pem
- XXX1.key
- XXX1.csr
- XXX1.crt
- XXX1.ca
J'utilise Zulu JDK 11.0.8 et SpringBoot 2.2.0 sous Windows. Ce que j'essaye de faire est d'activer https dans l'application SpringBoot.
Voici les propriétés ssl dans le fichier de propriétés SpringBoot:
server.ssl.key-store-type=JKS
server.ssl.key-store=XX1.jks
server.ssl.key-store-password=password
server.ssl.key-alias=tomcat
J'ai généré un keystore à l'aide de la commande suivante:
keytool -import -alias tomcat -file XXX1.crt -keystore XX1.jks -storepass password
Lors de l'exécution de l'application, j'obtiens le message d'erreur suivant:
Caused by: org.apache.catalina.LifecycleException: Protocol handler start failed
at org.apache.catalina.connector.Connector.startInternal(Connector.java:1008) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
at org.apache.catalina.core.StandardService.addConnector(StandardService.java:227) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
... 17 common frames omitted
Caused by: java.lang.IllegalArgumentException: jsse.alias_no_key_entry
at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:99) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
at org.apache.tomcat.util.net.AbstractJsseEndpoint.initialiseSsl(AbstractJsseEndpoint.java:71) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:218) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
at org.apache.tomcat.util.net.AbstractEndpoint.bindWithCleanup(AbstractEndpoint.java:1124) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
at org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:1210) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:586) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
at org.apache.catalina.connector.Connector.startInternal(Connector.java:1005) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
... 19 common frames omitted
Caused by: java.io.IOException: jsse.alias_no_key_entry
at org.apache.tomcat.util.net.SSLUtilBase.getKeyManagers(SSLUtilBase.java:328) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
at org.apache.tomcat.util.net.SSLUtilBase.createSSLContext(SSLUtilBase.java:247) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:97) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
... 25 common frames omitted
Une idée de ce que j'ai mal fait?
Je vous remercie
Réponses
TLDR: vous avez besoin de la clé privée
Bien que nous parlions souvent vaguement d'un serveur SSL / TLS ayant ou utilisant `` un certificat '', en fait, il a besoin non seulement d'un certificat, mais de la clé privée associée (toujours) et de tout (s) certificat (s) CA intermédiaire (s) associé (s) (généralement , mais peut dépendre de l'autorité de certification et / ou des clients). keytool -importest un alias pour -importcertlequel importe uniquement un certificat ou une chaîne; cela ajoute un cert / chain à un privateKeyEntry préexistant ou crée un trustedCertEntry. Dans votre cas, votre keystore ne contenait pas déjà la clé privée, donc keytool a créé un trustedCertEntry, c'est pourquoi Tomcat se plaint que l'alias configuré est `` no_key_entry '' - c'est-à-dire qu'il s'agit d'un trustedCertEntry, qui est inadéquat, inutilisable et erroné, pas un privateKeyEntry selon les besoins et les exigences.
Recherchez `` convertir PEM en magasin de clés Java '' ou `` convertir PEM en JKS '' (et éventuellement `` convertir PEM en PKCS12 '' également) et vous trouverez des centaines de questions posées au cours de la dernière décennie, avec à peu près autant de variations des deux vraies réponses :
Si vous avez ou obtenez OpenSSL, utilisez
openssl pkcs12 -exportpour combiner les fichiers au format PEM de certificat, de clé privée et de chaîne (CA) dans un fichier au format PKCS12. Java moderne (depuis 2017) peut toujours utiliser PKCS12 directement en tant que keystore; les anciennes versions pouvaient parfois le faire, mais vous obligeait parfois à convertir le PKCS12 en JKS aveckeytool -importkeystore(non-import[cert]) et les anciennes réponses reflètent cette ancienne exigence. Si nécessaire, vous pouvez déplacer ou copier les fichiers au format PEM sur une autre machine suffisamment sécurisée et dotée d'OpenSSL, puis déplacer ou recopier le PKCS12.OpenSSL est livré en standard sur presque tous les Linux et de nombreux autres Unix, mais pas sur Windows. Vous pouvez l'obtenir pour Windows à partir de plusieurs sources dont je considèrehttp://slproweb.com/products/Win32OpenSSL.html le mieux entretenu.
Téléchargez et utilisez KeyStore Explorer .