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

使用自定义密码套件的Java HTTPS连接,java,ssl,encryption,https,Java,Ssl,Encryption,Https,假设我尝试使用HttpsURLConnection通过HTTPS连接到web服务器。现在,如果我使用以下方法设置/限制客户端上的密码: System.setProperty(“https.cipherSuites”,myCustomCipherSuites) 我想知道我的Java客户机和web服务器之间如何商定密码。例如,如果我的密码套件包括[medium,strong],并且web服务器支持[weak,medium,strong,strong] 1-是否选择“强”,即客户端和服务器上可用的最强

假设我尝试使用HttpsURLConnection通过HTTPS连接到web服务器。现在,如果我使用以下方法设置/限制客户端上的密码:

System.setProperty(“https.cipherSuites”,myCustomCipherSuites)

我想知道我的Java客户机和web服务器之间如何商定密码。例如,如果我的密码套件包括[medium,strong],并且web服务器支持[weak,medium,strong,strong]

1-是否选择“强”,即客户端和服务器上可用的最强的? 2-是否有一个由web服务器定义的优先级,然后在客户端上进行可用性检查,以查找具有最高优先级(在web服务器上)且相互可用(在客户端和服务器上)的密码


另外,如果我有一个密码“a”、“b”、“c”和“d”的列表,并且web服务器只支持“e”、“f”和“g”。。。我是否可以确定,客户端和服务器都会用尽一切可能来协商连接,并在放弃之前尝试找到一个通用密码(因为没有可用的通用密码)。我很确定答案是肯定的。。。但我只想确认一下

关于你的第一个问题:

客户机按其首选顺序提供密码套件列表(最需要的第一个,最不需要的最后一个)

服务器应该选择列表中它愿意同意的第一项,忽略服务器可能具有的任何偏好。但是,没有(简单的)方法可以阻止服务器使用自己的首选项(如果它们与客户端的首选项不匹配)


至于第二个,如果没有匹配的密码套件,则连接失败。这不是一个真正的“排气”,而是一个“我支持a、B、C和D”|“我不支持任何一个。我想我们无法连接。”

所有好问题。我没有任何答案,但我确实想指出,您可以使用-Djavax.net.debug=ssl虚拟机参数查看客户端与服务器的ssl握手。希望这能帮助一些人。