有没有办法在 JavaScript 中检测网站是否使用浏览器不信任的 SSL 证书(但被用户接受)通过 HTTPS 加载? IE。它是无效/过期/自签名 SSL 证书。window.isSecureContext
不表示这个,是true
在所有情况下,我都自己尝试过 badssl.com如果页面是通过 HTTPS 加载的。
我的用例:我正在尝试使用 ApplicationCache 但它拒绝工作:在 Chrome 上它会触发 error
带有异常消息的回调 "Manifest fetch failed (9)" ,在 Firefox 上它会默默地失败。
由于这意味着浏览器的行为不同,我希望它是可检测的,并且我想确保在 ApplicationCache 无法使用时完全跳过它。
我不想从 JavaScript 创建单独的 SSL 连接(用户可能安装了自定义 CA 的证书等),也不想尝试使用 ApplicationCache 捕获异常。
最佳答案
无法通过不受信任的 SSL 证书加载网页。它可能会加载未公开信任但用户已明确添加异常的证书 - 这意味着用户信任该证书。
相反,您似乎想知道您的站点是否加载了与服务器提供的不同的证书,即客户端和服务器之间是否有一些活跃的人,例如 SSL 拦截公司代理或本地防病毒产品.为此,您需要了解证书详细信息并将其与您的期望进行比较。不幸的是,这在纯 Javascript 中是不可能的。
有关更多信息,请参阅 Within a web browser, is it possible for JavaScript to obtain information about the HTTPS Certificate being used for the current page? , Is there a way to get SSL certificate details using JavaScript? .有关在服务器端检测 MITM 的替代方法,请参阅 Detect man-in-the-middle on server side for HTTPS或 Detecting HTTPS Interception (with the caddy webserver) .
关于javascript - 检测是否在 javascript 中使用不受信任的 SSL 证书加载网页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59756537/