检测浏览器 TLS 兼容性

Detect browser TLS compatibility

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

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

这是否可以使用客户端 javascript 库来完成?如果是这样,那我应该使用什么?

谢谢。

您可以使用 the API provided by How's my SSL?.

在下面的例子中,我检查了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>

至少有两个网站可以为您检查浏览器功能,包括 SSL Labs (https://www.ssllabs.com/ssltest/viewMyClient.html) and HowsMySSL (https://www.howsmyssl.com/)。 HowsMySSL 也有一个不错的 API,可以从 JavaScript.

轻松检查

确实,您无法检查 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,因此您可以向用户显示消息。

小记;抛开代码,我认为人们应该知道,如果您向最终用户显示与此相关的错误消息,您应该了解 TLS 版本不仅是浏览器限制,而且本质上是 OS 级别。您必须在您的机器上启用它 并且 您的浏览器必须支持它。您可以使用最新的 chrome,但如果在 Internet 设置(Windows)中它已被禁用,您仍然会遇到 TLS 协商问题。

这是一个方法 使用 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');