tomcat配置ssl访问chrome提示ERR_SSL_VERSION_OR_CIPHER_MISMATCH

今天配完tomcat ssl后,发现页面无法访问。chrome提示以下:

访问错误.png

问题是其他服务器上一样的配置完全没问题。
百度了一圈没找到解决方案,对tomcat配置ssl的原理也不甚了解。后面谷歌找到了解决方案,在ssl的那个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_ECDHE_RSA_WITH_RC4_128_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_RSA_WITH_RC4_128_SHA"

具体connector配置如下:

 <Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true" URIEncoding="UTF-8" 
               keystoreFile="conf/chinanetcenter.tomcat"  keystorePass="2013111"
               clientAuth="false" sslProtocol="TLS" keystoreType="PKCS12" 
                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_ECDHE_RSA_WITH_RC4_128_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_RSA_WITH_RC4_128_SHA"
               compression="on" compressionMinSize="50" noCompressionUserAgents="gozilla, traviata"
               compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"/>

配置完后,就可以访问页面了。

具体原因不足,后面有机会深入了解tomcat机制原理再来探讨。

以下是找问题中看到的一些资料:

tomcat的ssl有两种实现,一种是使用apr,一种是JSSE。tomcat会自动选择使用哪种实现。如果服务器安装了apr,好像会自动选择使用apr(本人推测上面的错误可能和apr有关系,因为唯独那台服务器装了apr,就不行了)。可以通过指定protocol来让tomcat选择JSSE实现。

tomcat对SSL的实现有两种,JSSE和APR
(1)JDK 从1.4版本就实现JSSE,APR使用OpenSSL引擎,所以想使用APR实现的话,必须配置OpenSSL引擎。
(2)JSSE分为BIO实现和NIO实现,BIO实现的protocol值为org.apache.coyote.http11.Http11Protocol,NIO实现的protocol值org.apache.coyote.http11.Http11NioProtocol。
据我试验,tomcat6中必须使用BIO实现方式。使用NIO实现方式会出错。
如果想使用APR方式则必须安装Tomcat本地库。
(3)大部分tomcat中默认的连接器就是BIO连接器
经试验tomcat6是BIO连接器,不支持NIO,因此connect连接器的protocol值应该写为org.apache.coyote.http11.Http11Protocol


 

猜你喜欢

转载自my.oschina.net/wangfushu/blog/1629711