2010-08-16 159 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最初是通過不安全的連接加載的。但是,該連接是本地主機,因此與通過互聯網進行加載相比,它的關注程度要小一些。

因此,這裏不涉及零工作,但取決於應用程序的複雜性或者您已經如何編寫它,這可能並不困難。而且,一旦完成,您的用戶應該擁有更流暢的體驗(沒有任何額外的接受證書說明)。