我在端口8443上安装了Tomcat-7, configured support for TLSv1.2 .
我的连接器配置:
protocol = "org.apache.coyote.http11.Http11NioProtocol" SSLEnabled = "true" scheme = "https" secure = "true" sslProtocol = "TLSv1.2" sslEnabledProtocols = "TLSv1.2"
然后我配置了一个我想要使用的强密码列表 . TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
正如我所读到的,Tomcat可以使用Java JSSE或OpenSSL
JSSE协议= "org.apache.coyote.http11.Http11NioProtocol"
OpenSSL协议= "org.apache.coyote.http11.Http11AprProtocol"
我的tomcat连接器配置了JSSE协议 .
如果我使用SHA1添加以下密码,它可以工作 . (没有带有SHA1的GCM)TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA .
我已经下载了Java加密扩展策略文件 . 尝试使用Java 7和Java 8 .
在安装Cryptographic Extensions之前,我在启动Tomcat时遇到以下错误
INFO: Initializing ProtocolHandler ["http-nio-8443"]
mai 20, 2014 3:57:43 PM org.apache.tomcat.util.net.jsse.JSSESocketFactory getEnableableCiphers
WARNING: None of the ciphers specified are supported by the SSL engine : TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
根据Java 7 Documentation,应支持GCM-SHA384和CBC-SHA384的所有这些强密码:http://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#ciphersuites
如果我稍微改变一下密码:
INFO: Initializing ProtocolHandler ["http-nio-8443"]
mai 20, 2014 4:21:11 PM org.apache.tomcat.util.net.jsse.JSSESocketFactory getEnableableCiphers
WARNING: None of the ciphers specified are supported by the SSL engine : TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA584,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA584,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA584,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA584
这表明我的Tomcat / Java支持我的密码列表 .
问题可能出在浏览器上吗?我尝试过最新的Chromium和Firefox . 在检查了一些提交后,我发现Chromium支持SHA256,SHA384和AES-GCM .
4 回答
发现Chromium和Firefox都不支持这些更高的密码 .
可用的最强/最高密码是TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
不支持SHA384且不支持AES_256_GCM
https://www.ssllabs.com/ssltest/viewMyClient.html
密码套房(按优先顺序排列)
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256(0xc02b)
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256(0xc02f)
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256(0x9e)
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA(0xc00a)
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA(0xc009)
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA(0xc013)
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA(0xc014)
TLS_ECDHE_ECDSA_WITH_RC4_128_SHA(0xc007)
TLS_ECDHE_RSA_WITH_RC4_128_SHA(0xc011)
TLS_DHE_RSA_WITH_AES_128_CBC_SHA(0x33)
TLS_DHE_DSS_WITH_AES_128_CBC_SHA(0x32)
TLS_DHE_RSA_WITH_AES_256_CBC_SHA(0x39)
TLS_RSA_WITH_AES_128_GCM_SHA256(0x9c)
TLS_RSA_WITH_AES_128_CBC_SHA(0x2f)
TLS_RSA_WITH_AES_256_CBC_SHA(0x35)
TLS_RSA_WITH_3DES_EDE_CBC_SHA(0xa)
TLS_RSA_WITH_RC4_128_SHA(0x5)
TLS_RSA_WITH_RC4_128_MD5(0x4)
您引用的standard algorithm name documentation只是名称列表,它们是有效保留的,但不一定是实现的 .
SunJSSE provider(Oracle JRE中的默认JSSE提供程序)未在Java 7中实现任何GCM密码套件 . 它们位于updated table for the Java 8 implementation中 .
您可能还需要
sslProtocol="TLSv1.2"
.我是一名Web开发人员,面临使用Tomcat 7和Java7版本运行应用程序的类似问题,并找到了修复程序 .
通过在tomcat的server.xml文件中添加以下属性
对于Firefox 37.0.2,支持的密码列表是: