在tomcat9

时间:2016-12-24 12:26:52

标签: java tomcat https

我正在我的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"
    />

2 个答案:

答案 0 :(得分:1)

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

由于您未在keyAlias中指定属性Connector,因此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颁发的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。你这么帮助我。