如何为Java指定SSL密码套件的服务器首选顺序?

时间:2013-12-30 09:41:47

标签: java ssl encryption jsse

我在HTTP / HTTPS服务器上使用Java 1.6和netty 3.8。 我已经通过ssllab.com(https://www.ssllabs.com/ssltest/analyze.html)完成了SSL测试,我得到了下面的密码套件的结果。

  

密码套件(按强度排序; 服务器没有偏好

但是,google.com的结果有所不同。 https://www.ssllabs.com/ssltest/analyze.html?d=www.google.com&s=74.125.227.148

  

Cipher Suites(服务器首选订单中的SSL 3+套件,然后使用SSL 2套件)

如何为密码套件设置服务器端首选项顺序? JSSE是否有任何关于它的属性或API?

提前致谢。

2 个答案:

答案 0 :(得分:2)

您可以尝试使用所需顺序的数组调用setEnabledCipherSuites(),但JSSE文档中没有任何内容表明它会将该顺序用作所需的顺序,并且TLS RFC 2246中没有任何内容表明当在客户建议的密码套件中进行选择时,服务器有义务遵守任何特定的顺序。

编辑您可能最好将Apache HTTPD反向代理放在服务器前面并在那里终止SSL。 Apache HTTPD使用OpenSSL,它可以让您完全按照自己的意愿行事。对于某些Web应用程序需要客户端证书而其他人不需要客户端证书的情况也是如此,假设您正在编写Web应用程序。

答案 1 :(得分:0)

从Java 1.8开始,SSLParameters类上有一个setUseCipherSuitesOrder方法。

设置的方式取决于您使用的服务器。如果可以访问SSLEngine,则可以获取参数,更改值,然后在引擎上重新设置参数。