我正在我的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"
/>
似乎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。你帮了我很多。