Tomcat 7的Diffie-Hellman公钥错误
我成功地用Tomcat和SSL证书安装了两台Ubuntu机器。 我在Centos 6上遵循了完全相同的过程,但当我尝试连接到服务器(使用Opera)时,我得到了以下结果: 服务器有一个弱的、短暂的Diffie-Hellman公钥 连接器如下所示,catalina.log中没有错误: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"
<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实例上运行现有的通配符证书,这是最后一个障碍。谢谢