java - 在 iframe 中添加证书异常(exception)

标签 java javascript html iframe ssl-certificate

我有一个 Iframe,其中包含一个自签名 https 链接的 URL。在正常情况下,浏览器会要求添加此类链接的异常(exception),但在 iframe 中不允许添加异常(exception)。只是提示错误代码:sec_error_ca_cert_invalid。知道如何在自签名 url 的情况下提示在 iframe 中添加证书异常(exception)吗?

最佳答案

首先,为窗口中的文档提示SSL异常与在iframe中显示的文档之间的区别是一个重要的安全问题。正如您所注意到的,用户不知道 iframe 中显示的 URL(或者在本例中,尝试加载)。如果浏览器的异常机制显示在 iframe 中,用户将看到浏览器的地址栏显示根文档的 URL——位于完全不同的域中。这可能会导致用户困惑,并最终从安全 Angular 导致错误且不安全的选择。

您不应期望找到可以改变现代浏览器中此行为的黑客/解决方法。

也就是说,如果 iframe 不显示提示,最简单的解决方法是从 iframe 域获取一个页面作为窗口的根文档加载,从而触发提示。考虑以下顺序:

  1. 用户请求www.example.com/entry
    • 服务器以某种方式决定(最终)在 iframe 中加载哪个“动态”主机,我们称之为 www.dynamic.example
    • 服务器将浏览器重定向到动态主机上的已知 URL:www.dynamic.example/redirect
  2. 用户的浏览器将 www.dynamic.example/redirect 请求作为正常页面加载,作为浏览器窗口中的文档。
    • www.dynamic.example 使用自签名证书,因此浏览器会显示通常对 sec_error_ca_cert_invalid 执行的任何警告/警报/提示
    • 从用户体验的 Angular 来看,这非常丑陋,如果用户拒绝为证书添加本地异常(exception),一切都会停止。
    • 如果您确信用户会为自签名证书添加异常(exception),那么一旦这样做...
  3. 用户的浏览器重新加载 www.dynamic.example/redirect,这次按照用户的指示接受自签名证书。
    • www.dynamic.example 上的此 URL 应立即重定向返回www.example.com 上的另一个众所周知的位置,比方说:www.example.com/pageWithIFrame
  4. 用户的浏览器请求www.example.com/pageWithIFrame
    • 此页面加载,并包含指向 www.dynamic.example 上某些内容的 iframe
    • 由于用户已接受 www.dynamic.example 的自签名证书,因此应呈现该 iframe 中的内容。

此解决方案仅使用 HTTP 重定向,不需要代理服务器或将 SSL/TLS 降至纯文本 HTTP。但是,它确实需要您的网站 (www.example.com) 与具有自签名证书的任何其他域之间进行协作。如果该其他域无法提供重定向回您的方式(例如,在该域不知情的情况下嵌入内容),则它将无法工作。

相同的重定向链也适用于提供由受信任的 CA 签名的证书的网站。在这种情况下,步骤 2 将立即过渡到步骤 3,无需用户干预。

关于java - 在 iframe 中添加证书异常(exception),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23474373/

相关文章:

Java:非堆内存分析

javascript - 带高度的 Angular Material 垫抽屉问题

html - 防止html页面被bot/crawler抓取缓存

java - Maven:部署了 javax.servlet 规范

java - SSL keystore 路径错误

java - Play Scala 从另一个方法调用 Controller 方法

javascript - 如何使后退按钮链接到用户访问过的上一页?

javascript - 将php数组转换为js selectpicker数组格式

javascript - d3 <路径> 的值无效

javascript - 进入视口(viewport)时触发 CSS 动画