在iframe中添加证书例外

时间:2014-05-05 13:59:19

标签: java javascript html iframe ssl-certificate

我有一个包含自签名https链接的网址的iframe。在正常情况下,浏览器要求添加此类链接的例外,但在iframe中不允许添加例外。它只是提示错误代码:sec_error_ca_cert_invalid。任何想法如何在自签名网址的情况下提示在iframe中添加证书例外?

2 个答案:

答案 0 :(得分:5)

首先,提示窗口中 root 文档的SSL例外与iframe 中显示的文档之间的区别是一个重要的安全问题。如您所知,用户不知道iframe中显示的URL(或者在这种情况下,尝试加载)。如果浏览器的例外机制显示在iframe中,则用户会在完全不同的域上看到浏览器的地址栏显示 root 文档的URL。从安全角度来看,这可能会导致用户混淆,并最终导致错误的不安全的选择。

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

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

  1. 用户请求www.example.com/entry
    • 服务器以某种方式决定哪个"动态"托管(最终)加载iframe,让我们称之为www.dynamic.example
    • 服务器将浏览器重定向到动态主机上的知名网址:www.dynamic.example/redirect
  2. 用户的浏览器请求www.dynamic.example/redirect作为正常页面加载,作为浏览器窗口中的 root 文档。
    • www.dynamic.example正在使用自签名证书,因此浏览器会显示它通常为sec_error_ca_cert_invalid
    • 所做的任何警告/提示/提示
    • 从用户体验的角度来看,这非常难看,如果用户拒绝为证书添加本地例外,那么一切都会停止。
    • 如果您确信用户将为自签名证书添加例外,那么这样做......
  3. 用户的浏览器重新加载www.dynamic.example/redirect,这次根据用户的说明接受自签名证书。
    • www.dynamic.example上的此网址应立即重新返回www.example.com上另一个众所周知的位置,让我们说:www.example.com/pageWithIFrame < / LI>
  4. 用户的浏览器请求www.example.com/pageWithIFrame
    • 此页面加载,并包含指向www.dynamic.example
    • 上的内容的iframe
    • 由于用户已经接受了www.dynamic.example的自签名证书,因此应该呈现该iframe中的内容。
  5. 此解决方案仅使用HTTP重定向,并且不需要代理服务器或将SSL / TLS降至明文HTTP。但是,它确实需要您的站点(www.example.com)与具有自签名证书的任何其他域之间的协作。如果其他域无法重定向回您(例如,在没有该域知识的情况下嵌入内容),它将工作。

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

答案 1 :(得分:2)

嗯,除了提供接受自签名证书的自定义Chrome / Firefox / Safari之外,您唯一的选择是:

  • 要求用户在其网络浏览器中添加永久证书例外
  • 要求第三方支付有效证书。

你无法用HTML / JavaScript来做任何事情&#34;破解你的方式&#34;。

修改

另一种选择是在您的应用程序(IFRAME)和第三方服务器(例如Apache HTTP Server作为代理服务器)之间设置代理服务器。它可以:

  1. 剥离SSL,即将第三方HTTPS转换为本地HTTP,
  2. 是一个固定点的HTTPS-URL,用户可以将其列入白名单。
  3. 如果您的网络应用程序在本地Tomcat服务器(或类似服务器)中运行 - 例如http://tomcat:8080/app/ - 可以通过将Apache HTTP Server添加为代理来改进第二个选项:

    ProxyPass /app/* http://tomcat:8080/app/*
    ProxyPass /3rd/* https://third-party/*
    

    用户只需访问一个URL - 默认端口80的Apache代理 - http://tomcat/app/