如何检查服务器是否支持使用Java的SSL?

A.D*_*mas 0 java encryption ssl

我需要检查服务器是否支持SSL和Web服务器的密码.

我在Java中查看了SSLSocket,但我没有让它正常工作.

我使用的方法getSupportedProtocols()总是为每个网址提供相同的协议.此外,我没有得到从服务器给出的密码.我猜想getEnabledCipherSuites()这将是正确的方法

try {
    SSLContext ctx = SSLContext.getDefault();
    ctx.getClientSessionContext().setSessionTimeout(5); // in seconds
    SSLSocket socket = (SSLSocket) ctx.getSocketFactory().createSocket("host.com", 443);

    socket.setSoTimeout(5000); // in millis
    String[] result = socket.getEnabledCipherSuites();
    Arrays.sort(result);
    for (int i = 0; i < result.length; i++) {
        System.out.println(result[i]); 
    }
 } catch (IOException ex) {
     System.out.println("Error!");
 }
Run Code Online (Sandbox Code Playgroud)

如何检查服务器是否使用SSL?从服务器返回了哪些密码?

Bru*_*uno 5

getSupportedProtocols()/CipherSuites()返回您的一方可以支持的协议和密码列表(分别).getEnabledProtocols()/CipherSuites()返回您身边启用的这些列表的子集.

这不会告诉你有关服务器支持的内容.

根据TLS规范,客户端发送可以使用的最高协议版本以及它想要使用的密码套件列表.然后,服务器使用它在该列表中支持的最高协议(如果有的话),并在该列表中选择它想要的密码套件(如果有的话).

关于密码套件选择的完成方式有一些灵活性(例如,参见SSLHonorCipherOrderApache Httpd中的指令).

从本质上讲,如果您想查看服务器实际支持哪些密码套件,则必须遍历您支持的每个密码套件并逐个启用它们以尝试握手.