检测浏览器TLS兼容性

时间:2015-06-23 00:20:18

标签: javascript ssl browser detect

我们有一个SSL网站,主机最近禁用了较旧的SSL协议,如TLS 1.0及更低版本。根据浏览器的不同,如果网站访问者访问该网站时,如果他们使用的浏览器至少不支持TLS 1.1,则会在访问该网站时获取空白页或隐藏的错误消息。

我希望创建一个不在SSL端口上的登录页面,如果它支持TLS 1.1及更高版本,我可以检测浏览器功能。如果它没有,那么我想向他们展示一个友好的消息来升级他们的浏览器或使用不同的浏览器。

这是可以使用客户端JavaScript库完成的吗?如果是这样,那么我应该使用什么。

感谢。

5 个答案:

答案 0 :(得分:31)

您可以使用api提供的the API

在以下示例中,我检查了tls_version。检查given_cipher_suites也可能是一个好主意。

<script>
window.parseTLSinfo = function(data) {
  var version = data.tls_version.split(' ');
  console.log(
    version[0] != 'TLS' || version[1] < 1.2
    ? 'So bad! Your browser only supports ' + data.tls_version + '. Please upgrade to a browser with TLS 1.2 support.'
    : 'All OK. Your browser supports ' + data.tls_version + '.'
  );
  console.log(data);
};
</script>
<script src="https://www.howsmyssl.com/a/check?callback=parseTLSinfo"></script>

答案 1 :(得分:4)

至少有两个网站会为您检查浏览器功能,包括SSL实验室(https://www.ssllabs.com/ssltest/viewMyClient.html)和HowsMySSL(https://www.howsmyssl.com/)。 HowsMySSL还有一个很好的API,可以从JavaScript轻松检查。

答案 2 :(得分:2)

确实,您无法检查TLS版本。我不得不从只支持TLS 1.2(而不是我的页面)的站点加载脚本。使用简单的HTML脚本标记不会给你任何线索未加载的线索。结果我最终使用以下脚本从不同的域加载JS:

$.ajaxSetup({'cache':true});
$.getScript('{scriptUrl}').done(function(){
   alert("done");
}).fail(function( jqxhr, settings, exception ) {
    alert(jqxhr.status);
    alert(jqxhr.responseText);
    alert(exception);
});

如果出现TLS问题,jqxhr.status将为404,因此您可以向用户显示消息。

答案 3 :(得分:2)

小记;代码放在一边我认为大家应该知道,如果您向最终用户提供有关此问题的错误消息,您应该了解TLS版本不仅限于浏览器限制,而且基本上是操作系统级别。您必须在计算机上启用它,您的浏览器必须支持它。您可以使用最新的Chrome,但如果在Internet设置(在Windows上)已被禁用,您仍然会遇到TLS协商问题。

答案 4 :(得分:2)

这是一种方法 使用jQuery创建图像,并添加src属性,我使用来自PayPal的按钮,现在所有对PayPal的请求都必须通过TSL1.2 希望这可以工作

jQuery('<img />').on({
    load: function() {
      console.log("support TSL1.2");
    },
    error: function() {
      console.log('no support TSL1.2');
    }
}).attr('src','https://www.paypal.com/en_US/i/btn/btn_xpressCheckout.gif');