有没有办法检查JavaScript是否给定主机它的SSL证书是否有效? (非阻塞)
在我的情况下,我想显示:“你也可以使用https:// ..”如果通过JavaScript,我可以向https://my_url
发出请求,而不会被要求接受不受信任的证书。
这可以异步完成吗?
答案 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项目:
答案 5 :(得分:1)
有用的通知:如果没有有效的SSL证书,则navigator.clipboard
在Chrome浏览器中将是undefined
。
答案 6 :(得分:0)
您可以在其他地方运行服务器,根据您的需要处理证书检查,然后您的javascript应用程序向该服务器发送请求检查的请求。这确实要求您在世界上的某个地方至少有一台您可以信任的服务器。
这种性质的查询可以很容易地在后台完成。