簡體   English   中英

如何檢查服務器是否支持Java的SSL?

[英]How to check whether a server supports SSL with Java?

我需要檢查服務器是否支持SSL和來自Web服務器的密碼。

我查看了Java中的SSLSocket,但無法正常工作。

我使用了getSupportedProtocols()方法,它總是為每個URL給出相同的協議。 此外,我沒有從服務器獲得密碼。 我猜想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!");
 }

如何檢查服務器使用SSL? 服務器返回了什么密碼?

getSupportedProtocols()/CipherSuites()返回您一方可以支持的協議和密碼的列表。 getEnabledProtocols()/CipherSuites()返回您已啟用的這些列表的子集。

這不會告訴您有關服務器支持什么的太多信息。

根據TLS規范,客戶端發送可以使用的最高協議版本以及要使用的密碼套件列表。 然后,服務器使用該列表(如果有)中支持的最高協議,並從該列表(如果有)中選擇所需的密碼套件。

關於如何完成密碼套件選擇,有一些靈活性(例如,請參閱Apache SSLHonorCipherOrder指令 )。

本質上,如果要查看服務器實際支持的密碼套件,則必須遍歷所支持的每個密碼套件,並使它們一個接一個地進行嘗試。

使用方法getSupportedProtocols()時,它總是為每個URL給出相同的協議。

它始終為您提供最終支持的協議。 每個網址都不會改變。

此外,我沒有從服務器獲得密碼。 我猜想getEnabledCipherSuites()將是正確的方法。

你猜錯了。 它為您提供了最終支持的密碼。

如何檢查服務器使用SSL?

調用startHandshake()並捕獲異常。

服務器返回了什么密碼?

您不能,但是可以通過查看SSLSession協商了什么密碼套件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM