环境
Tomcat7
JDK1.8
Chrome 63
问题
AppScan 扫描 检测到 SHA-1 密码套件。如下图:
解决过程
按AppScan扫描报告里的意思就是使用了以下这两个较弱的密码套件。
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
解决办法就是去掉这两个玩意,应该就妥妥滴了。
Tomcat的SSL配置现状:
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslEnabledProtocols="TLSv1.2"
keystoreFile="conf/cer/server.keystore"
keystorePass="abc123"
URIEncoding="utf-8"
useBodyEncodingForURI="true"
address="127.0.0.1"
ciphers="TLS_ECDHE_RSA_WITAES_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"/>
ciphers是之前为了解决 检测到RC4密码套件 的问题而配置的。
去掉那两个玩意后:
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslEnabledProtocols="TLSv1.2"
keystoreFile="conf/cer/server.keystore"
keystorePass="abc123"
URIEncoding="utf-8"
useBodyEncodingForURI="true"
address="127.0.0.1"
ciphers="TLS_ECDHE_RSA_WITAES_128_CBC_SHA256,
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_256_CBC_SHA256,
TLS_RSA_WITH_AES_256_CBC_SHA"/>
重启TOMCAT。用IE访问正常,用Chrome访问,居然无法访问。。。这是为毛???
于是试试网上搜搜看,只搜到这篇 http://www.zhihuiku.net/view/163 。解决办法跟我理解一样,估计作者没测试吧。
继续搜索,测试。。。试了不同的密码套件组合,试了各种重新生成证书,试了升级tomcat,jdk。升级chrome。。。
就这样1天过去。只得出一个结论,去掉TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA这个chrome就无法访问。。。无解。。。
休息一个晚上,第二天继续。。。搞了一个上午还是没结果。然后突然一想是不是我搜索的姿势不对。决定换个姿势。把TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA先加上,通过调试工具看看什么情况。
发现了新的关键词:
Chrome browser reports obsolete cipher (AES_256_CBC with HMAC-SHA1)
心想解决这个问题应该就可以了。
用这一句google搜了下终于找到解决办法。
https://security.stackexchange.com/questions/145196/chrome-browser-reports-obsolete-cipher-aes-256-cbc-with-hmac-sha1
里面有个回答是用以下密码套件在jboss下解决了
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_256_GCM_SHA384
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA256
发现这一段跟我之前的配置不一样,试一下。
没提示了,AppScan重新扫扫,解决了。
总结:
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslEnabledProtocols="TLSv1.2"
keystoreFile="conf/cer/server.keystore"
keystorePass="abc123"
URIEncoding="utf-8"
useBodyEncodingForURI="true"
address="127.0.0.1"
ciphers="TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
TLS_RSA_WITH_AES_256_GCM_SHA384,
TLS_RSA_WITH_AES_128_GCM_SHA256,
TLS_RSA_WITH_AES_256_CBC_SHA256,
TLS_RSA_WITH_AES_128_CBC_SHA256"/>