2010-08-16 139 views
0

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

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

我不想要一个涉及IE配置的解决方案,我不想将IE配置步骤添加到我们的安装指南! 而在这个阶段,我不太可能放入适当的证书,尽可能多的我喜欢。

更新:应用程序的url只是localhost:port。帮助文件只是help.html。我们与About框有相同的问题。 About.html。

+0

你能举例说明URL吗?父页面是什么类型的URL,window.open URL是什么样子的? – 2010-08-16 10:36:04

回答

0

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

你的选择是:

  • 接受你的自签名证书永久
  • 问题真正的证书
  • 集成额外的窗户进入已经开放的,而不是产卵更多的浏览器垃圾
  • 住不得不接受证书每个窗口一次
0

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

的Forge项目:

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

博客文章谈论的问题,以及如何锻造可以用来解决这个问题:

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

它的要点是:Forge提供两种方式供用户避免处理证书警告。但是,他们两个都可能需要一些工程来实现,这些工程可能会或可能不会涉及比您认为值得的更多工作。

方法1:你可以有你的用户通过SSL保护的网站访问在本地主机上运行的应用程序(不在本地,而是通过一个域名在网络上)。为了实现这一点,Forge通过Flash来隧道SSL,它可以处理跨域请求。这些细节从任何你必须添加到应用程序中的东西中抽象出来。你的用户都会去同一个网站,这比“localhost:12345”更方便,也许更容易记住,并下载一些JavaScript。然后,该JavaScript将执行SSL跨域请求以“localhost:12345”显示界面。这里是重构的部分......如果你的基于web的应用程序还没有使用ajax来更新它的内容并显示它的接口,那么你需要改变它来做到这一点。这是因为所有跨域和SSL魔术都是通过JavaScript进行的。您需要的另一部分是应用程序能够将其生成的自签名证书上载并存储到用户访问的服务器上。通过这种方式,它可以在访问网站并下载JavaScript时作为可信证书加入。这种方法可确保在本地主机上运行的应用程序的安全流量,而不会产生恼人的安全警告。

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

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

因此,这里不涉及零工作,但取决于应用程序的复杂性或者您已经如何编写它,这可能并不困难。而且,一旦完成,您的用户应该拥有更流畅的体验(没有任何额外的接受证书说明)。