如何检测HttpServletRequest的TLS版本?

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

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

我正在运行Tomcat 7和Java 8。

如何检测HttpServletRequest的TLS版本?

回答:

这在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'

});

});

您将需要在您的应用服务器上的

上运行一个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截止日期以及他们可以采取的更新浏览器补偿措施。

以上是 如何检测HttpServletRequest的TLS版本? 的全部内容, 来源链接: utcz.com/qa/417907.html

回到顶部