繁体   English   中英

与Tomcat 7的Diffie-Hellman公钥错误

[英]Diffie-Hellman public key error with Tomcat 7

我成功地使用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中的T​​omcat配置以禁用弱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"
        ...

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

https://weakdh.org

僵局问题

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

修复我们必须确保我们的服务器(在本例中为tomcat)使用强密码进行SSL的问题。

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

JSSE因为它依赖于Java运行时,我们必须首先找出我们使用tomcat的Java版本。 Tomcat 7支持java 1.6以上版本。 然后我们必须找到相关java版JSSE支持的相应密码套件。 弱的是哪个有' DHE ',所以选择那些不包含' DHE '的。 下面列出了几个更强大的java 1.6 JSSE套件。

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 Unlimited Strength Jurisdiction Policy Files

如果Tomcat配置为使用APR而不是JSSE,则上述配置将不起作用。 您可以按照适用于APR和logjam管理指南的tomcat ssl配置指南启用强密码套件。

它适用于Google Chrome ver.44,感谢Jason Scroggins建议:

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

将其添加到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"/>

尝试使用https:// localhost:8443进行浏览

对我来说,这是tomcat使用的java版本的问题。 我将版本从JDK 6更改为JDK 1.7_080,错误消失了。

当我说我更改了JAVA版本时,我的意思是我修改了环境变量“JAVA_HOME”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM