2017-01-23 70 views
2

我正在逐步停止對Web應用程序的TLS 1.0和TLS 1.1的支持。如何檢測HttpServletRequest的TLS版本?

我想檢測用戶,這將影響到他們對我的服務器的連接。

我運行Tomcat 7和Java 8

如何檢測爲HttpServletRequest的TLS版本?

+1

這是一個老問題。恐怕tomcat不會發布'SSLSession'。你是使用tomcat standalone還是像apache或nginx這樣的代理? – pedrofb

+0

在AWS ELB後面使用Tomcat。我想如果我放棄apache或nginx我可以在模塊中運行TLS 1.2檢測? –

+0

@pedrofb和舊的你的意思是在各種論壇上以各種方式提出問題,迄今爲止還沒有確切的答案。我看了一下Servlet API的源碼和Tomcat的源碼,發現沒有好的答案。它看起來像反射的深度hackery可能會解決這個問題,但它會非常脆弱。 –

回答

0

這在Java中並不實用。它需要修改JSSE實現或插入替代方案。

我最終通過部署How's My SSL並使用客戶端的跨域AJAX來檢查SSL狀態並將其報告給我的應用服務器來解決此問題。

您需要有來自客戶端的未提交的直接請求才能正確評估其SSL的狀態。不要將HTTPS負載平衡器放在How's My SSL之前。它會打破它,給你不正確的結果。

下面是客戶端JavaScript代碼,可應努力利用公共如何是我的SSL服務(我建議在部署自己):

$.getJson('https://www.howsmyssl.com/a/check') 
.done(function (result) { 
    $.post('/logs', { 
        name: 'howsmyssl', 
        level: 'info', 
        message: result 
    }); 
}) 
.fail(function(err) { 
    $.post('/logs', { 
        name: 'howsmyssl', 
        level: 'error', 
        message: 'could not reach howsmyssl' 
    }); 
}); 

你需要有一個REST端點在運行/在您的應用服務器上登錄,該服務器可以接收POST以捕獲此信息。您可以將該路徑和消息格式更改爲您心中的內容。此端點應進行身份驗證,並應使用事件時間,經過身份驗證的主體(用戶)以及可能的其他信息(如IP地址)豐富日誌。

結果的內容是這樣的(漂亮的印刷,以使其更易於閱讀):

{ 
    "given_cipher_suites": [ 
     "TLS_GREASE_IS_THE_WORD_8A", 
     "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", 
     "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", 
     "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", 
     "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", 
     "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", 
     "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", 
     "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", 
     "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", 
     "TLS_RSA_WITH_AES_128_GCM_SHA256", 
     "TLS_RSA_WITH_AES_256_GCM_SHA384", 
     "TLS_RSA_WITH_AES_128_CBC_SHA", 
     "TLS_RSA_WITH_AES_256_CBC_SHA", 
     "TLS_RSA_WITH_3DES_EDE_CBC_SHA" 
    ], 
    "ephemeral_keys_supported": true, 
    "session_ticket_supported": true, 
    "tls_compression_supported": false, 
    "unknown_cipher_suite_supported": false, 
    "beast_vuln": false, 
    "able_to_detect_n_minus_one_splitting": false, 
    "insecure_cipher_suites": { 
    }, 
    "tls_version": "TLS 1.2", 
    "rating": "Probably Okay" 
} 

您可以登錄這日誌聚合或數據庫後進行查詢查找特定用戶電話或電子郵件。您甚至可以提醒用戶瀏覽您的應用中瀏覽器的TLS差距,並特別強調即將到來的TLS 1.2截止日期以及他們可以採取的步驟來更新瀏覽器以進行補償。