Tomcat8 SSL连接器

时间:2017-07-26 08:59:13

标签: ssl https configuration java-8 tomcat8

我跟着official tutorial在tomcat8上安装了ssl,但是我的浏览器给了我一个 ERR_SSL_VERSION_OR_CIPHER_MISMATCH 错误。

首先,我向您介绍有关服务器的信息:

  • ip:10.1.5.55
  • Tomcat端口:8200
  • Java版本:1.8.0_121
  • Tomcat版本:Apache Tomcat / 8.5.11
  • Servlet规范版本:3.1
  • JSP版本:2.3

我使用https://10.1.5.55:8200/作为url连接到我的服务器(使用http协议)

让我感到困惑的第一件事是所有教程都在谈论连接器:

<Connector protocol="org.apache.coyote.http11.Http11NioProtocol" port="8443" .../>

但基本的配置文件server.xml为我提供了这个模板:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
               maxThreads="150" SSLEnabled="true" >
        <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
        <SSLHostConfig>
            <Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
                         certificateFile="conf/localhost-rsa-cert.pem"
                         certificateChainFile="conf/localhost-rsa-chain.pem"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>

无论如何,我跟进了教程,并在E:\ keys:

下生成了我的密钥库
keytool -genkey -alias myapp -keystore myapp-keystore

我输入姓名:10.1.5.55:8200 密码:改变 我按下返回以获得密钥的相同密码。

然后我写了我的连接器(我修改了http端口以便在8199上运行):

<Connector
    port="8200" 
    protocol="org.apache.coyote.http11.Http11NioProtocol" 
    SSLEnabled="true" 
    maxThreads="300" 
    scheme="https" 
    secure="true" 
    clientAuth="false" 
    sslProtocol="TLS" 
    keystoreFile="E:\keys\myapp-keystore" 
    keystorePass="changeit"
/>

但我此时得到了错误。

现在我尝试了所有解决方案:

  • 逐个尝试所有TLS协议(v1,v1.1,v1.2,SSLv3)
  • 将密钥库的名字和姓氏改为10.1.5.55 lonely
  • try protocol =“HTTP / 1.1”,protocol org ... Http11Nio2Protocol

最后我尝试添加密码。这是我使用的列表:

ciphers="TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, 
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, 
TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384, 
TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384, 
TLS_DHE_DSS_WITH_AES_256_CBC_SHA256, 
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, 
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, 
TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, 
TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, 
TLS_DHE_DSS_WITH_AES_256_CBC_SHA, 
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, 
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, 
TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256, 
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256, 
TLS_DHE_DSS_WITH_AES_128_CBC_SHA256, 
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, 
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, 
TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, 
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, 
TLS_DHE_DSS_WITH_AES_128_CBC_SHA, 
TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, 
TLS_ECDH_ECDSA_WITH_RC4_128_SHA, 
TLS_ECDH_RSA_WITH_RC4_128_SHA, 
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, 
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, 
TLS_RSA_WITH_AES_256_GCM_SHA384, 
TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, 
TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384, 
TLS_DHE_DSS_WITH_AES_256_GCM_SHA384, 
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 
TLS_RSA_WITH_AES_128_GCM_SHA256, 
TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, 
TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256, 
TLS_DHE_DSS_WITH_AES_128_GCM_SHA256, 
TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, 
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, 
TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, 
TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, 
TLS_EMPTY_RENEGOTIATION_INFO_SCSVF 
"

我得到了这个列表from here,在这里我了解到Tomcat7与Java7的工作方式与Tomcat8与Java8的工作方式不同。我尝试在这里推荐删除“sslProtocol”并添加“useServerCipherSuitesOrder”但没有任何效果,我的浏览器总是出现同样的错误。

请有人告诉我如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

您正在生成1024位的DSA证书,Chrome停止/停止支持DSA(DSS),如herehere所示。尝试生成2048位的RSA证书

替换此命令

keytool -genkey -alias myapp -keystore myapp-keystore

keytool -genkey -alias myapp -keystore myapp-keystore -keyalg RSA