我不明白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
服务器即Java在TLS_RSA_WITH_AES_128_CBC_SHA
上选择Server 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如何选择优先选择的密码呢?这是在某处记录的吗?我无法弄清楚这里发生了什么。
答案 0 :(得分:4)
它没有。 RFC 2246所说的全部是“服务器将选择一个密码套件”。没有任何地方说它会选择最安全的,或者确实是如何进行选择的。
答案 1 :(得分:1)
要实现的东西:客户在选择中也有发言权。如果客户端说它只能支持128位密码,那就是将要选择的内容。请参阅id,您的客户端甚至通过删除所有支持的密码来支持AES 256。
您没有按优先顺序提供密码列表。您提供的是可接受的密码列表,必须与客户端的密码匹配。如果其中任何一个不被接受,请删除它们。
答案 2 :(得分:0)
虽然您的声明2246(或5256)没有说服务器从客户提供的优先顺序中从相互支持的密码套件中选择密码套件是正确的,但NIST 800-57第3部分,第4.3节,采购指导,陈述: