【问题标题】:Alias name "tomcat" does not identify a key entry别名“tomcat”不能识别密钥条目
【发布时间】:2021-07-16 11:06:27
【问题描述】:

我通过使用 openssl 生成 csr 来请求证书。我有私钥文件。现在我想将证书安装在要在 tomcat 中使用的密钥库中。我尝试了以下方法:

  1. 使用以下命令创建了 p12 文件: openssl pkcs12 -export -in website_com.crt -inkey website_com.key -name tomcat -out website_com.p12
  2. 使用以下命令将其导入密钥库:keytool -importkeystore -deststorepass mypass -destkeystore somename.jks -srckeystore website_com.p12 -srcstoretype PKCS12

导入成功,并在 somename.jks 中创建了 tomcat 别名。用于 SSL 端口的 Tomcat 连接器:

< Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true" URIEncoding="UTF-8">
    <!--    <SSLHostConfig sslProtocol="TLS" sslEnabledProtocols="TLSv1.2"  -->    
        <SSLHostConfig protocols="TLSv1.3"
            ciphers="TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384, 
            TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384, TLS_DHE_DSS_WITH_AES_256_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
            TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDH_RSA_WITH_AES_256_CBC_SHA,
            TLS_DHE_DSS_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
            TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256, TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,
            TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
            TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
            TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_RSA_WITH_AES_256_GCM_SHA384,
            TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384, TLS_DHE_DSS_WITH_AES_256_GCM_SHA384,
            TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,
            TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256, TLS_DHE_DSS_WITH_AES_128_GCM_SHA256, TLS_EMPTY_RENEGOTIATION_INFO_SCSVF">
            <Certificate certificateKeystoreFile="D:\apache-tomcat-9.0.37\conf\somename.jks"
                         certificateKeystorePassword="mypass"
                         certificateKeyAlias="tomcat"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>

终端窗口截图

知道我做错了什么吗?

P.S 无法生成新的 CSR 并请求新的证书

【问题讨论】:

  • 使用keytool -list -keystore D:\apache-tomcat-9.0.37\conf\somename.jks 检查是否存在名为tomcatPrivateKeyEntry。顺便说一句:从 Tomcat 8.5 开始,不需要从 PEM 到 PKCS12 的整个转换(请参阅this question)。从 Tomcat 5.5 开始,不需要从 PKCS12 转换为 JKS。
  • 我尝试使用 pem 文件而不是密钥库,得到一个错误提示 Caused by: java.security.KeyStoreException: Cannot store non-PrivateKeys。知道为什么会这样吗?证书和密钥文件都是 .pem 格式,是的 somename.jks 有一个名为 PrivateKeyEntrytomcat

标签: java web-services ssl tomcat keytool


【解决方案1】:

我通过使用第一步生成的 p12 文件而不是使用 .jks 文件解决了这个问题。

< Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true" URIEncoding="UTF-8">
        <SSLHostConfig protocols="TLSv1.3"
            <Certificate certificateKeystoreFile="D:\apache-tomcat-9.0.37\conf\somename.p12"
                         CertificateKeystorePassword="mypass"
                         certificateKeystoreType="PKCS12"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>

【讨论】:

    猜你喜欢
    • 2012-02-06
    • 2018-02-24
    • 2018-07-01
    • 2012-07-03
    • 2013-07-09
    • 2018-05-06
    • 2013-09-12
    • 1970-01-01
    • 2014-03-11
    相关资源
    最近更新 更多