Tomcat 7的Diffie-Hellman公钥错误

Tomcat 7的Diffie-Hellman公钥错误,tomcat,ssl,centos,certificate,diffie-hellman,Tomcat,Ssl,Centos,Certificate,Diffie Hellman,我成功地用Tomcat和SSL证书安装了两台Ubuntu机器。 我在Centos 6上遵循了完全相同的过程,但当我尝试连接到服务器(使用Opera)时,我得到了以下结果: 服务器有一个弱的、短暂的Diffie-Hellman公钥 连接器如下所示,catalina.log中没有错误: <Connector port="some port number" protocol="org.apache.coyote.http11.Http11Protocol"

我成功地用Tomcat和SSL证书安装了两台Ubuntu机器。 我在Centos 6上遵循了完全相同的过程,但当我尝试连接到服务器(使用Opera)时,我得到了以下结果:

服务器有一个弱的、短暂的Diffie-Hellman公钥

连接器如下所示,catalina.log中没有错误:

<Connector port="some port number"  
           protocol="org.apache.coyote.http11.Http11Protocol" 
           SSLEnabled="true"
           maxThreads="150" scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS"
           keystoreFile="path to jks"
           keystoreType="JKS"
           keystorePass="mypass1"
           keyPass="mypass2"  /> 


在Firefox中,我遇到了不可信的通信错误。

在conf/server.xml中将允许的密码列表添加到Tomcat配置中以禁用弱Diffie-Hellman密码后,我的错误就出现了:

    <Connector
        ...
        ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA"
        ...

它与Google Chrome版本44配合使用,感谢Jason Scroggins的建议:

  • 在新选项卡中,在地址栏中键入或粘贴
    about:config
    ,然后按Enter键。单击按钮以保证小心
  • 在列表上方的搜索框中,键入或粘贴dhe,并在筛选列表时暂停
  • 双击
    security.ssl3.dhe_rsa_aes_128_sha
    首选项将其从true切换为false(禁止Firefox使用此密码)
  • 双击
    security.ssl3.dhe_rsa_aes_256_sha
    首选项将其从true切换为false(禁止Firefox使用此密码)

  • 这是因为新的浏览器版本在访问配置了SSL弱DH密码的网站时开始发出警告/错误。有关此问题的更多信息,请访问以下链接

    要解决这个问题,您可以在浏览器端或服务器端找到解决方法。服务器端是最好的,因为它将解决所有用户的问题,如果他们从不同的浏览器/位置访问服务器

    解决这个问题,我们必须确保我们的服务器(在本例中是tomcat)对SSL使用强密码

    在tomcat中,有两种不同的SSL实现。Defautl是作为Java运行时的一部分提供的JSSE实现。另一个是APR实现,默认情况下使用OpenSSL引擎

    JSSE因为它依赖于Java运行时,所以我们必须首先找出我们在tomcat中使用的Java版本。Tomcat7支持Java1.6以上版本。然后我们必须找到相关java版本JSSE支持的相应密码套件。弱的是有“DHE”的,所以选择不包含“DHE”的。下面列出了一些针对Java1.6JSSE的更强大的套件

    TLS_RSA_WITH_AES_128_CBC_SHA
    TLS_RSA_WITH_AES_256_CBC_SHA
    TLS_ECDH_ECDSA_WITH_RC4_128_SHA
    TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
    TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA
    TLS_ECDH_RSA_WITH_RC4_128_SHA
    TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
    TLS_ECDH_RSA_WITH_AES_256_CBC_SHA
    TLS_ECDHE_ECDSA_WITH_RC4_128_SHA
    TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
    TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
    TLS_ECDHE_RSA_WITH_RC4_128_SHA
    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
    TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
    TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA
    TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA
    TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
    TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
    TLS_ECDH_ECDSA_WITH_NULL_SHA
    TLS_ECDH_RSA_WITH_NULL_SHA
    TLS_ECDHE_ECDSA_WITH_NULL_SHA
    TLS_ECDHE_RSA_WITH_NULL_SHA
    ...
    
    编译一个强密码套件列表,并将其添加到tomcat中conf/server.xml中的连接器密码中

    <Connector
    ...
    ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDH_ECDSA_WITH_RC4_128_SHA,TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDH_RSA_WITH_RC4_128_SHA,TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,TLS_ECDH_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_RC4_128_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_RC4_128_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDH_ECDSA_WITH_NULL_SHA,TLS_ECDH_RSA_WITH_NULL_SHA,TLS_ECDHE_ECDSA_WITH_NULL_SHA,TLS_ECDHE_RSA_WITH_NULL_SHA"
    ...
    />
    
    
    
    重新启动服务器,错误/警告应消失。记住,如果Java版本不同,上面的复制/粘贴可能不起作用。因此,请参阅正确的版本和支持的密码套件

    注意:为了能够使用256位AES密码,有必要安装JCE无限强度权限策略文件


    如果将Tomcat配置为使用APR而不是JSSE,则上述配置将不起作用。您可以通过遵循tomcat ssl配置指南for APR和管理指南来启用强密码套件。

    对我来说,这是tomcat使用java版本的问题。 我将版本从JDK 6更改为JDK 1.7_080,错误消失了。
    当我说我更改了JAVA版本时,我的意思是我修改了环境变量“JAVA_HOME”。

    将其添加到server.xml文件中并重新启动服务器

    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
           maxThreads="150" scheme="https" secure="true"
           keystoreFile="keystorePath"
           keystorePass="keystorepass"
           ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA"
           clientAuth="false" sslProtocol="TLS"/>
    
    
    

    尝试浏览

    我们是否知道此列表是否确定?对于每个版本的Tomcat,我们在哪里/如何确定该列表?我没有找到一个,而且很可能很难提供一个通用列表,因为一些密码被一些人认为是保存的,而另一些密码则是不安全的。因此,这在很大程度上取决于您的环境,如果您控制客户机,您甚至可以将其缩小到您只想使用的一个。以下是一些进一步的链接,为所有运行Tomcat 5.5/Java 6的可怜虫提供了更详细的解释:APR connector是一种非常好的方法。我遵循教程,在新的Tomcat实例上运行现有的通配符证书,这是最后一个障碍。谢谢