如果SSL证书有效,请检入Javascript

时间:2010-04-11 22:26:07

标签: javascript ssl certificate

有没有办法检查JavaScript是否给定主机它的SSL证书是否有效? (非阻塞)

在我的情况下,我想显示:“你也可以使用https:// ..”如果通过JavaScript,我可以向https://my_url发出请求,而不会被要求接受不受信任的证书。

这可以异步完成吗?

7 个答案:

答案 0 :(得分:7)

看看这里:https://support.mozilla.org/pl/questions/923494

<img src="https://the_site/the_image" onerror="redirectToCertPage()">

但是,这可能是特定于Mozilla的。

无论如何,我会看看这些方面的解决方案是否有效:

<script> var sslCertTrusted = false; </script>
<script src="https://example.com/ssltest.js"></script>
<script> 
    if (!sslCertTrusted) 
    {
        alert('Sorry, you need to install the certificate first.');
        window.location('http://example.com/cert_install_instructions/');
    }
    else
    {
        // alert('Redirecting to secure connection')
        window.location('https://example.com/');
    }
<script>

您当然需要让您的网络服务器在网址https://example.com/ssltest.js下返回此代码:

sslCertTrusted = true;

我不确定细节。但我已经看到类似的技术用于检测广告拦截等。你可能需要搭载window对象,如果变量不能被另一个脚本修改,但通常使上述概念证明工作是作为练习留给读者。

答案 1 :(得分:5)

我到目前为止所发现的 - 有可能使用Firefox,还不了解其他浏览器:

https://developer.mozilla.org/En/How_to_check_the_security_state_of_an_XMLHTTPRequest_over_SSL

答案 2 :(得分:3)

直接的答案是否定的。 Javascript不提供任何验证证书的方法。这是留给浏览器的工作。

解决此问题的更好方法是从服务器端。如果您正在控制该站点,那么您可以使用服务器端收集的信息在页面上呈现变量。

在.Net之类的内容

var canSecure = <%= MySiteHasSsl ? "true" : "false" %>;
if (canSecure) {
    if (confirm("This site supports SSL encryption. Would you like to switch to a secure connection?")) {
        location.href = "https://mysite.com";
    }
}

答案 3 :(得分:1)

这个问题没有意义。如果没有打开SSL连接,就无法获得服务器的SSL证书,一旦完成,就告诉用户他们可以做到这一点也没有意义。

答案 4 :(得分:1)

我不太确定你的用例是什么。如果您只是在为其他网站的某人提供链接之前尝试“提前检查”,那么此处的其他答案将比我的更有意义。

如果您希望mysite.com使用默认情况下在浏览器中不受信任的SSL证书,但您有另一种方式知道它应该受信任,那么您可以使用JavaScript TLS实现来制作跨域请求到其他网站。但是,这要求您的网站在https上提供并在浏览器中受信任,并且其他网站提供Flash跨域策略文件。

如果这听起来像你想做的,请查看github上的开源Forge项目:

http://github.com/digitalbazaar/forge/blob/master/README.md

答案 5 :(得分:1)

有用的通知:如果没有有效的SSL证书,则navigator.clipboard在Chrome浏览器中将是undefined

答案 6 :(得分:0)

您可以在其他地方运行服务器,根据您的需要处理证书检查,然后您的javascript应用程序向该服务器发送请求检查的请求。这确实要求您在世界上的某个地方至少有一台您可以信任的服务器。

这种性质的查询可以很容易地在后台完成。