提问者:小点点

在tomcat9上安装证书时会发生异常


我正在我的ubuntu tomcat服务器上安装JKS证书。我已经搜索过了,但仍然无法解决它。浏览器可以连接到tomcat 8080,但它不是由HTTPS传输的。我使用命令keytools-entkeystore-srckeystore**. pfx-deskeystore**.jks-srcstoretype PKCS12-desstoretype 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。

添加:我已经用keyAlias="***"更改了keyAlias="***",异常消失了。但是端口8443仍然无法连接,8080没有在HTTPS中传输。我如何检查它?netstat显示端口8080和8443真的在监听。

localhost日志

localhost]org. apache.catalina.core.ApplicationContext.log SessionListener:contextDestroed()INFO[localhost-start Stop-2]org.apache.catalina.core.ApplicationContext.log ContextListener:contextDestroed()INFO[localhost-start Stop-1]org.apache.catalina.core.ApplicationContext.log ContextListener:contextFirst()INFO[localhost-start Stop-1]org.apache.catalina.core.ApplicationContext.log SessionListener:contextFirst()

localhost_access_log. txt

"GET /Beer-v1/HTTP/1.1"304-
"GET /Beer-v1/css/a.cssHTTP/1.1"304-

catalina. log

NG tomcat. util.digester.SetProperty tiesRule.开始[SetProperty tiesLaw]{Server/Service/Engine/Realm}将属性'digest'设置为'MD5'未找到匹配的属性。
NG tomcat.util.digester.Digester.endElement未找到匹配'Server/Service/Engine/Resource'的规则。

添加
我下载了tomcat 9的干净副本并在原始conf/server. xml中添加代码。在catalina.out中java.security。无法恢复键发生。

<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"
    />

共2个答案

匿名用户

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

由于您没有在Connector中指定属性keyAlias,tomcat将尝试加载在Keystore中找到的第一个密钥。请参阅证书KeyAlias的留档(

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

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

 keytool -list -v -keystore keystore.jks

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

 keystoreType = "PKCS12"

这是tomcat对conf/server. xml中的SSL连接器(弃用属性)的最低配置,使用为127.0.0.1颁发并在/conf中复制的自签名证书

<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的干净副本进行了测试,URLhttps://127.0.0.1:8443

匿名用户

此链接对我有帮助:java.security。无法恢复密钥。

使用命令将PFX转换为JKS时,将目标密钥库密码设置为keypasswd。记得将. jks文件放在正确的路径中。我认为它在自签名证书的错误place.As中,我发现它不需要将密钥库密码设置为keypasswd。

多亏了pedrofb。你帮了我很多。

相关问题