如何检测HttpServletRequest的TLS版本?

时间:2017-01-23 19:11:11

标签: java tomcat servlets

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

我想根据他们对我的服务器的连接来检测这会影响的用户。

我正在运行Tomcat 7和Java 8.

如何检测HttpServletRequest的TLS版本?

1 个答案:

答案 0 :(得分:1)

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

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

您需要从客户端获得未经批准的直接请求才能正确评估其SSL状态。不要在如何使用我的SSL前面放置HTTPS负载均衡器。它会破坏它并给你不正确的结果。

以下是客户端JavaScript的一小部分,它应该使用公共的How我的SSL服务(我建议部署你自己的):

public class Signup extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_signup);
        getSupportActionBar().setTitle("Sign up");
        EditText edittext=(EditText)findViewById(R.id.etfn);
        Button button=(Button)findViewById(R.id.breg);
        button.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View v) {
                //process
            }
       });
    }
}

您需要在应用服务器上运行 / logs 的REST端点,该端点可以接收POST以捕获此信息。您可以将该路径和消息格式更改为您心中的内容。应该对此端点进行身份验证,并且应该使用事件时间,经过身份验证的主体(用户)以及可能的其他信息(如IP地址)来丰富日志。

结果的内容看起来像这样(漂亮打印以便于阅读):

$.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'
    });
});

您可以将其记录到日志聚合器或数据库中,以便稍后查询以查找要呼叫或发送电子邮件的特定用户。您甚至可以提醒用户注意浏览器在应用程序中的TLS中的漏洞,并特别强调即将到来的TLS 1.2截止日期以及他们可以采取的更新浏览器以补偿的步骤。