我在 Ubuntu 14.04(Java OpenJDK 1.7)上有一个 Tomcat 7 服务器,它已经运行了一年多,没有出现任何问题。几个月前,它无法通过 Chrome 访问,我通过切换到 Firefox 来访问这个特定的网站来解决这个问题。最近(几天)前,它无法通过 Firefox 访问。
我咨询过这个问题这基本上和我遇到的问题一样,但出于某种原因,该解决方案不再有效。截至昨天,Chrome 41 和 Firefox 37 均未显示我的网站。在 Chrome 上,我收到以下响应:
A secure connection cannot be established because this site uses an unsupported protocol.
Error code: ERR_SSL_VERSION_OR_CIPHER_MISMATCH
在 Firefox 上我得到这个:
Cannot communicate securely with peer: no common encryption algorithm(s). (Error code: ssl_error_no_cypher_overlap)
我已经尝试了所有协议组合,答案和参考文献推荐对于 Tomcat 7,但没有成功。看来浏览器制造商已经加强了安全性,以至于这些参数不再起作用:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslEnabledProtocols = "TLSv1,TLSv1.1,TLSv1.2" />
我整天都在尝试不同的参数组合,但都没有成功。我还能够在两个不同的 Tomcat 安装(第二个在 Windows 上)上复制该问题,所以我很确定这不是机器问题。
在我放弃并安装 Java 8 和 Tomcat 8(这将耗费我周末的剩余时间)之前,我想在这里询问一些可能的解决方案。
答案1
要调试这种情况,您可以使用 openssl 的命令行工具,尤其是openssl s_client
。通过添加选项-tls1
,-tls1_1
和 ,-tls1_2
您可以测试协议的兼容性,以及-cipher [cipherlist]
密码的兼容性。例如
openssl s_client -connect example.com:443 -tls1
您将获得有关连接、证书和功能(如重新协商、压缩等)的详细信息和可能的警告。这将有助于调试问题。
答案2
要在 tomcat 中启用 Tls,请在 tomcat/conf/ 文件夹下的 tomcat server.xml 文件的 Connector 部分添加此参数 sslEnabledProtocols="TLSv1.X"。例如:要配置 TLSv1.1,请按照以下配置进行操作。
<Connector port="8443"
protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
keystoreFile="ssl/.keystore" keystorePass="changeit"
clientAuth="false" sslProtocol="SSL" sslEnabledProtocols="TLSv1.1" />
重启服务器