解決方法:jno_key_entry

Sep 02 2020

Sectigoによって生成された次のファイルがあります。

  1. XXX1.pem
  2. XXX1.key
  3. XXX1.csr
  4. XXX1.crt
  5. XXX1.ca

WindowsでZuluJDK11.0.8とSpringBoot2.2.0を使用しています。私がやろうとしているのは、SpringBootアプリでhttpsを有効にすることです。

これは、SpringBootプロパティファイルのsslプロパティです。

server.ssl.key-store-type=JKS
server.ssl.key-store=XX1.jks
server.ssl.key-store-password=password
server.ssl.key-alias=tomcat

次のコマンドを使用してキーストアを生成しました。

keytool -import -alias tomcat -file XXX1.crt -keystore XX1.jks -storepass password

アプリを実行すると、次のエラーメッセージが表示されます。

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

私が間違ったことは何ですか?

ありがとうございました

回答

1 dave_thompson_085 Sep 02 2020 at 08:00

TLDR:秘密鍵が必要です

「証明書」を持っている、または使用しているSSL / TLSサーバーについて大まかに話すことがよくありますが、実際には、証明書だけでなく、関連する秘密鍵(常に)と関連する中間別名「チェーン」CA証明書(通常は)が必要です。 、ただし、CAやクライアントに依存する可能性があります)。証明書またはチェーンのみをインポートkeytool -importするエイリアスです-importcert。これにより、既存のprivateKeyEntryに証明書/チェーンが追加されるか、trustedCertEntryが作成されます。あなたの場合、キーストアにはまだ秘密鍵が含まれていなかったため、keytoolはtrustedCertEntryを作成しました。これが、Tomcatが構成済みのエイリアスが「no_key_entry」であると文句を言う理由です。必要に応じてprivateKeyEntry。

「PEMをJavaキーストアに変換する」または「PEMをJKSに変換する」(および場合によっては「PEMをPKCS12に変換する」)を検索すると、過去10年間に尋ねられた何百もの質問があり、2つの実際の回答のバリエーションがほぼ同じです。 :

  1. OpenSSLを所有または取得している場合は、を使用openssl pkcs12 -exportして、証明書、秘密鍵、およびチェーン(CA)PEM形式のファイルをPKCS12形式のファイルに結合します。最新のJava(2017以降)は、常にPKCS12をキーストアとして直接使用できます。古いバージョンではこれを実行できる場合もありますが、PKCS12をkeytool -importkeystore(ではなく-import[cert])でJKSに変換する必要がある場合があり、古い回答は以前の要件を反映しています。必要に応じて、PEM形式のファイルを十分に安全でOpenSSLを備えた別のマシンに移動またはコピーしてから、PKCS12を移動またはコピーして戻すことができます。

    OpenSSLは、ほぼすべてのLinuxおよび他の多くのUnixに標準装備されていますが、Windowsには標準装備されていません。あなたは私が考えるいくつかのソースからWindows用にそれを得ることができますhttp://slproweb.com/products/Win32OpenSSL.html 最高のメンテナンス。

  2. KeyStoreExplorerをダウンロードして使用します。