Tomcat:TLSv1.2,强密码不起作用

时间:2014-05-20 14:35:18

标签: java tomcat ssl jsse

我在端口8443上安装了Tomcat-7,配置了对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 protocol =“org.apache.coyote.http11.Http11NioProtocol”
OpenSSL protocol =“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。

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:2)

您引用的standard algorithm name documentation只是名称列表,这些名称已被有效保留,但未必实施。

{J}中的SunJSSE provider(Oracle JRE中的默认JSSE提供程序)并未在Java 7中实现任何GCM密码套件。它们位于updated table for the Java 8 implementation

您可能还需要sslProtocol="TLSv1.2"

答案 2 :(得分:1)

我是一名Web开发人员,面临使用Tomcat 7和Java7版本运行应用程序的类似问题,并找到了修复程序。

在tomcat的server.xml文件中添加以下属性

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"