与自定义密码套件的Java HTTPS连接

问题描述:

假设我尝试使用HttpsURLConnection通过HTTPS连接到Web服务器。现在,如果我设置/限制使用在客户端的密码:与自定义密码套件的Java HTTPS连接

System.setProperty("https.cipherSuites", myCustomCipherSuites);

我想知道如何密码将在我的Java客户端和Web服务器之间商定。例如,如果我的密码套件包括[中,强]和web服务器支持[弱,中,强,强] ...

1-将选择“strong”,即客户端和服务器上最强的可用? 2-是否存在由Web服务器定义的优先级,然后在客户机上检查可用性检查以找到具有最高优先级(在Web服务器上)并且相互可用(在客户机和服务器上)的密码?另外,如果我有一个密码列表“a”,“b”,“c”和“d”,并且web服务器支持“e”,“f”和“g”,只能...我确信客户端和服务器都会放弃协商连接的所有可能性,以便在放弃之前尝试找到通用密码(因为没有可用的通用密码)。我非常肯定,答案是肯定的......但我只是想确认一下。

+0

所有很好的问题。我没有任何答案,但我确实想指出,您可以使用-Djavax.net.debug = ssl虚拟机参数来查看您的客户端与服务器的SSL握手。希望有助于一些。 – hooknc 2011-04-22 15:30:54

关于你的第一个问题:

客户提供其优先顺序的密码套件的列表(第一个最想要的,需要的至少最后一个)。

服务器是假设选择它愿意同意的第一个项目,忽略服务器可能有的任何偏好。但是,没有(简单的)方法来防止服务器使用自己的偏好(如果它们不匹配客户端的偏好)。

至于第二,如果没有匹配的密码套件,连接失败。这不是真正的“排气”,就像“我支持A,B,C和D”一样“我不支持其中的任何一种,我们猜测我们无法连接。”