IE8 window.open SSL证书问题

时间:2010-08-16 10:24:06

标签: javascript internet-explorer-8 ssl-certificate

我有一个使用自签名证书的基于Web的应用程序。登录应用程序时,您必须接受证书。这是一种痛苦,但是......我们暂时还可以,而且一切都很好。 单击帮助链接时,它使用java脚本window.open在新窗口中打开帮助。一切正常。 IE8除外 在IE8中,当我使用window.open打开帮助文件时,它再次要求用户接受SSL证书。它就像是在一个新的安全区或其他东西。这在旧版IE或Firefox中不是问题。

有没有人知道解决这个问题的方法?有没有办法打开一个新窗口,但保持在同一个安全会话中?

我不想要涉及IE配置的解决方案,我不想在我们的安装指南中添加IE配置步骤! 在这个阶段,尽可能多地提供适当的证书是不切实际的。

更新:应用程序的url只是localhost:port。帮助文件只是help.html。我们在“关于”框中遇到了同样的问题。 About.html。

2 个答案:

答案 0 :(得分:0)

这是IE8的预期行为。除非您将站点证书添加到永久例外列表中,否则应该提示站点打开的每个新窗口。

您的选择是:

  • 永久接受您的自签名证书
  • 签发真实证书
  • 将额外的窗口集成到已经打开的窗口中,而不是产生更多的浏览器垃圾
  • 每个窗口必须接受一次证书

答案 1 :(得分:0)

opensource Forge项目可能会有所帮助。它的创建是为了帮助解决这个问题:安全地访问基于Web的应用程序,而无需用户处理自签名证书警告等。

Forge项目:

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

一篇博客文章讨论了这个问题以及Forge如何用来解决它:

http://blog.digitalbazaar.com/2010/07/20/javascript-tls-1/2/

它的主旨是:Forge为用户提供了两种避免处理证书警告的方法。但是,它们都可能需要一些工程设计,可能会或可能不会涉及比您认为的价值更多的工作。

方法1:您可以让您的用户通过受SSL保护的网站访问localhost上运行的应用程序(不是在本地,而是通过网络上的域)。为了实现这一点,Forge通过Flash隧道传输SSL,这可以执行跨域请求。详细信息将从您必须添加到应用程序中的任何内容中抽象出来。您的用户都会访问同一个网站,这比“localhost:12345”更方便,也更容易记住,并下载一些JavaScript。然后,JavaScript将对“localhost:12345”执行SSL跨域请求以显示该接口。这是重新设计部分......如果您的基于Web的应用程序尚未使用ajax更新其内容并显示其界面,那么您需要更改它以执行此操作。这是因为所有的跨域和SSL魔术都是通过JavaScript实现的。您需要的另一部分是应用程序能够将其生成的自签名证书上载并存储到您的用户访问的服务器。这样,当它们访问网站并下载JavaScript时,它可以作为可信证书包含在内。此方法可确保在localhost上运行的应用程序的安全流量,而不会产生恼人的安全警告。

如果您还没有受SSL保护的网站,或者不想支付费用,那么方法#2可能更具吸引力。

方法2:此方法的安全性稍差,但由于应用程序在localhost上运行,因此不应存在巨大的安全风险。这种方法也更快实现。在此方法中,您将从localhost服务器加载Forge JavaScript以及要信任的证书。从那时起,Forge JavaScript使https调用显示界面/与应用程序交互。这意味着仍然需要在#1中进行相同的ajax接口更改,但是,不必设置任何系统来存储自签名证书(或类似证书)。同样,缺点是要受信任的证书和Forge JavaScript最初是通过不安全的连接加载的。但是,这种连接是针对localhost的,所以与通过互联网加载相比,它的关注度稍低。

所以这里没有涉及零工作,但是根据应用程序的复杂程度或者你已经编写它的方式,它可能并不那么困难。而且,一旦完成,您的用户应该有更顺畅的体验(没有任何额外的接受证书的说明)。