【问题标题】:Tomcat8 SSL connectorTomcat8 SSL 连接器
【发布时间】:2017-07-26 18:23:43
【问题描述】:

我按照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 密码:changeit 我按回车键获得相同的密码。

然后我像这样写了我的连接器(我修改了 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 孤独
  • 试试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,在这里我了解到带有 Java7 的 Tomcat7 与带有 Java8 的 Tomcat8 的工作方式不同。按照这里的建议,我尝试删除“sslProtocol”并添加“useServerCipherSuitesOrder”,但没有任何效果,我的浏览器总是出现同样的错误。

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

【问题讨论】:

  • 您可以尝试将keystoreAlias="myapp" 添加到&lt;Connector 吗?
  • 感谢您的回答。我用我提供的基本配置 + 密码添加了它,但它不起作用
  • 尝试从证书的公用名中删除端口号。仅设置您的 IP 10.1.5.55(我不知道这是否是问题。通常使用域名)
  • 我保留了 keystoreAlias 并仅使用 ip 重新生成了我的密钥库,但又出现了同样的错误
  • 尝试生成 2048 位的 RSA 证书,而不是 1024 的 DSA 证书。使用keytool -genkey -alias tomcat -keyalg RSA -keystore myapp-keystorestackoverflow.com/a/29207397/6371459

标签: ssl https configuration java-8 tomcat8


【解决方案1】:

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

替换此命令

keytool -genkey -alias myapp -keystore myapp-keystore

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    相关资源
    最近更新 更多