【问题标题】:Exceptions happen when installing certificate on tomcat9在tomcat9上安装证书时出现异常
【发布时间】:2017-05-09 20:33:44
【问题描述】:

我正在我的 ubuntu tomcat 服务器上安装 JKS 证书。我已经搜索过,但仍然无法解决。浏览器可以连接到tomcat 8080,但它不是通过HTTPS传输的。 我使用命令keytool -importkeystore -srckeystore **.pfx -destkeystore **.jks -srcstoretype PKCS12 -deststoretype JKS 将PFX 转换为JKS 格式。

conf/server.xml 是:

<Connector port="8443" protocol="HTTP/1.1"
    maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
    keystoreFile="/home/hel/key/my.jks" 
    keystorePass="***"
    keyAlias="***" 
    clientAuth="false" sslProtocol="TLS" />

添加:
同时,我尝试了另一种配置(但输出相同的异常):

<Connector port="8443" protocol="HTTP/1.1"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               keystoreFile="/home/hel/key/***.pfx"
               keystoreType="PKCS12"
               keystorePass="***"
               keyAlias="***" 
               clientAuth="false" sslProtocol="TLS" />

/home/hel/key目录下有四个文件:.key,.pem,.pfx,.jks。

添加: 我把certificateKeyAlias="***"改成了keyAlias="***",异常消失了。但是8443端口还是连接不上,8080也没有HTTPS传输。我怎样才能检查它? netstat 表示端口 8080 和 8443 确实在监听。

localhost.log

信息 [localhost-startStop-2] org.apache.catalina.core.ApplicationContext.log 会话监听器: contextDestroyed() 信息 [localhost-startStop-2] org.apache.catalina.core.ApplicationContext.log ContextListener: contextDestroyed() 信息 [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log ContextListener: contextInitialized() 信息 [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log 会话监听器: contextInitialized()

localhost_access_log.txt

“GET /Beer-v1/HTTP/1.1”304 -
“GET /Beer-v1/css/a.css HTTP/1.1”304 -

catalina.log

NG tomcat.util.digester.SetPropertiesRule.begin [SetPropertiesRule]{Server/Service/Engine/Realm} 设置属性 'digest' to 'MD5' 没有找到匹配的属性。
NG tomcat.util.digester.Digester.endElement 没有找到匹配的规则 “服务器/服务/引擎/资源”。

已添加
我下载了一个干净的 tomcat 9 副本,并在原始 conf/server.xml 中添加了代码。在 catalina.out java.security.UnrecoverableKeyException: Cannot recover key 发生。

<Connector
    port="8443"
    protocol="org.apache.coyote.http11.Http11NioProtocol"
    connectionTimeout="20000"
    redirectPort="8443"
    scheme="https" 
    secure="true" 
    SSLEnabled="true"
    sslProtocol="TLS"
    keystoreFile="conf/***.jks"
    keystorePass="***" 
    keystoreType="JKS"
    clientAuth="false"
    />

【问题讨论】:

  • 你能发布更多的堆栈跟踪吗?实际错误在某处的 caused by 部分中。

标签: java tomcat https


【解决方案1】:

此链接对我有帮助:java.security.UnrecoverableKeyException: Cannot recover key

使用命令keytool -importkeystore -srckeystore **.pfx -destkeystore **.jks -srcstoretype PKCS12 -deststoretype JKS 将 PFX 转换为 JKS 时,将目标密钥库密码设置为与 keypasswd 相同。并记住将 .jks 文件放在正确的路径中。我认为它在错误的地方。至于自签名证书,我发现不需要将密钥库密码设置为与 keypasswd 相同。

感谢佩德罗夫。你帮了我很多。

【讨论】:

    【解决方案2】:

    似乎 tomcat 没有在 Keystore 中找到证书的私钥。

    由于您没有在Connector 中指定属性keyAlias,tomcat 将尝试加载在 Keystore 中找到的第一个密钥。见documentation of certificateKeyAlias(

    用于密钥库中服务器密钥和证书的别名。如果未指定,将使用从密钥库中读取的第一个密钥。 从密钥库中读取密钥的顺序取决于实现。从密钥库中读取密钥的顺序可能与添加它们的顺序不同。如果密钥库中存在多个密钥,强烈建议配置 keyAlias 以确保使用正确的密钥。

    检查密钥库以查看是否存在私钥及其别名。您可以使用

    列出条目
     keytool -list -v -keystore keystore.jks
    

    注意:可以直接使用pkcs12文件设置

     keystoreType = "PKCS12"
    

    更新:Tomcat SSL 配置

    这是conf/server.xml 中 SSL 连接器(不推荐使用的属性)的 tomcat 最低配置,使用为127.0.0.1 发出并复制到/conf 中的selfsigned certificate

    <Connector
        port="8443"
        protocol="org.apache.coyote.http11.Http11NioProtocol"
        connectionTimeout="20000"
        redirectPort="8443"
        scheme="https" 
        secure="true" 
        SSLEnabled="true"
        sslProtocol="TLS"
        keystoreFile="conf/keystore.jks"
        keystorePass="a1b2c3d4e5" 
        keystoreType="JKS"
        clientAuth="false"
        />
    

    我已经用干净的 tomcat 9 和 JRE 1.8 副本对其进行了测试,URL 为 https://127.0.0.1:8443

    【讨论】:

    • httpstatuses.com/304。你能清理tomcat工作目录和浏览器缓存(CTRL F5)吗?请同时发布 chrome 调试器的信息
    • 我已经删除了我的应用程序目录,现在 hostname:8443 显示 apache 主页。 Cookie 已清理。如何查看 chrome 调试器。你的意思是页面控制台输出吗?页面控制台显示:**Failed to load resource: net::ERR_EMPTY_RESPONSE hostname:8443/:1 GET hostname.cc:8443 net::ERR_EMPTY_RESPONSE**
    • 最后一条评论是 Error: and now hostname:8080 显示 apache 主页。不是8443。8443端口仍然无法连接。
    • 我真的被你的设置蒙上了阴影。一定有一些我没有看到并且不起作用的地方。我已经下载了一个干净的 tomcat 9 副本并配置了一个自签名证书。您在答案中有说明和证书。我建议你也这样做,从头开始配置tomcat并逐步添加自己的配置
    • 您的意思是不要更改原始 server.xml 中的任何内容吗?只需添加一个新的&lt;connector /&gt;?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    • 2021-09-13
    • 2023-04-11
    • 1970-01-01
    相关资源
    最近更新 更多