5

我不明白 Java 如何选择最喜欢的密​​码来使用Server Hello.

我有一个 Tomcat 5 配置,我在 SSL 连接器中设置了ciphers=TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, etc

服务器 ie Java 选择作为客户端支持TLS_RSA_WITH_AES_128_CBC_SHAServer Hello首选。但这不是最安全的,也不是http://docs.huihoo.com/java/javase/7/technotes/guides/security/SunProviders.html#SunJSSEProvider列出的首选编码TLS_RSA_WITH_AES_256_CBC_SHA
然后我认为是 server.xml 属性中的顺序产生了影响,我将另一个密码放在首位 ( TLS_DHE_RSA_WITH_AES_256_CBC_SHA),我在其中看到Client Hello它是受支持的。但是这个也没有被选中,又TLS_RSA_WITH_AES_128_CBC_SHA被选中了。

那么 JSSE 是如何选择偏好密码的呢?这是在某处记录的吗?我无法弄清楚这里发生了什么。

4

3 回答 3

4

它不必。RFC 2246所说的只是“服务器将选择一个密码套件”。它没有任何地方说它会选择最安全的,或者实际上任何关于它将如何做出选择的信息。

于 2012-04-24T10:16:03.800 回答
1

需要意识到的一点:客户在选择中也有发言权。如果客户说它只能支持 128 位密码,那么这就是将被选中的密码。通过删除除那个以外的所有受支持的密码,查看您的客户甚至支持 AES 256。

您没有按优先顺序提供密码列表。您正在提供必须与客户端匹配的可接受密码列表。如果其中任何一个不可接受,请将其删除。

于 2012-04-24T12:57:36.423 回答
0

虽然您关于 2246(或 5256)的声明并没有说服务器按照客户端提供的优先顺序从相互支持的密码套件中选择密码套件是正确的,但 NIST 800-57 第 3 部分的第 4.3 节采购指南指出:

  1. 实现应该按照客户端提交的优先顺序选择密码套件。
于 2013-06-04T19:54:36.187 回答