我正在我的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,并且不会在HTTPS中传输8080。我怎么检查呢? netstat
显示端口8080和8443正在侦听。
localhost.log
INFO [localhost-startStop-2] org.apache.catalina.core.ApplicationContext.log SessionListener: contextDestroyed()INFO [本地主机 - startStop-2] org.apache.catalina.core.ApplicationContext.log ContextListener: contextDestroyed()INFO [本地主机 - startStop-1] org.apache.catalina.core.ApplicationContext.log ContextListener: contextInitialized()INFO [本地主机 - startStop-1] org.apache.catalina.core.ApplicationContext.log SessionListener: 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}设置属性 “消化”到'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"
/>
答案 0 :(得分:1)
似乎tomcat没有在密钥库中找到证书的私钥。
由于您未在keyAlias
中指定属性Connector
,因此tomcat将尝试加载在Keystore中找到的第一个密钥。见documentation of certificateKeyAlias(
用于密钥库中的服务器密钥和证书的别名。如果未指定,将使用从密钥库读取的第一个密钥。从密钥库读取密钥的顺序取决于实现。可能不是按照添加密钥的顺序从密钥库读取密钥的情况。如果密钥库中存在多个密钥,则强烈建议配置keyAlias以确保使用正确的密钥。
检查密钥库以查看是否存在私钥及其别名。您可以使用
列出条目 keytool -list -v -keystore keystore.jks
注意:您可以直接使用pkcs12文件设置
keystoreType = "PKCS12"
这是conf/server.xml
中SSL连接器(不建议使用的属性)的tomcat的最低配置,使用为127.0.0.1
颁发的selfsigned certificate并在/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的干净副本测试了它,网址为https://127.0.0.1:8443
答案 1 :(得分:0)
此链接可以帮助我:java.security.UnrecoverableKeyException: Cannot recover key。
使用命令getColumn()
将PFX转换为JKS时,将目标密钥库密码设置为与keypasswd相同。并记住将.jks文件放在正确的路径中。我认为这是在错误的地方。至于自签名证书,我发现它不需要设置密钥存储密码与keypasswd相同。
感谢pedrofb。你这么帮助我。