如何检测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