一尘不染

如何检测HttpServletRequest的TLS版本?

tomcat

我正在逐步淘汰对Web应用程序的TLS 1.0和TLS 1.1的支持。

我想检测用户,这将基于他们与我的服务器之间的连接而影响。

我正在运行Tomcat 7和Java 8。

如何检测HttpServletRequest的TLS版本?


阅读 530

收藏
2020-06-16

共1个答案

一尘不染

这在Java中不切实际。它需要修改JSSE实现或插入替代方法。

我最终通过部署How’s My
SSL
并从客户端使用跨域AJAX来检查SSL状态并将其报告给我的应用服务器,从而解决了这一问题。

您需要来自客户端的未经代理的直接请求才能正确评估其SSL状态。不要将HTTPS负载平衡器放在“我的SSL方式”前面。它将破坏它并给您不正确的结果。

这是客户端JavaScript的一小段片段,应使用公共How’s My SSL服务(我建议部署您自己的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'
    });
});

您将需要在您的应用服务器上的 / logs
上运行一个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截止日期以及他们可以采取的更新浏览器补偿措施。

2020-06-16