2009-12-18 114 views
4

我們遇到了使用SSL保護Intranet/Internet網站的問題,其中 我們無法提前知道合格的域名。具有未知域名的SSL證書

基本上,我試圖製作一個程序,將安裝在我的直接控制之外的網絡服務器 上,可通過intra-or internet進行訪問。在任何一種情況下,我都希望通過SSL(https)保證安全。爲此,我想在目標機器上安裝一個SSL證書並且 。我的安裝程序已完全預打包 ,並且不應要求在我的 一端進行任何特定的安裝期間或安裝後安裝。問題是,我無法提前知道目標機器的名稱或域名 的名稱,所以據我所知可以告訴SSL連接會返回警告(或更糟?),因爲我包含的證書會(必須)有一個不同的 名稱。

我真的想避免這些警告,但我仍然想保持安全。有沒有 任何方式來安裝一個沒有證書警告的SSL連接,而沒有提前知道域名 ?

感謝您的任何幫助,您可以給予。

+0

避免警告的方式是從證書頒發機構購買證書。如果不知道域名(至少是第二層,例如example.com),他們就不會發給你一個證書 – bmb 2009-12-18 21:55:34

回答

9

你想要做什麼是不可能的。這是爲什麼。

證書將包含一組名稱(通用名稱,可能還包括主題備選名稱,可能包括通配符名稱)。

客戶端的Web瀏覽器將執行以下操作:

  1. 用戶想訪問 「https://myapp.mydomain.com/blog/posts/1」。
  2. 該請求是通過SSL並且請求中的域名是「myapp.mydomain.com」。
  3. 從Web服務器獲取證書。
  4. 確保證書中至少有一個名稱與請求中的域名完全相同或通配符匹配。
  5. 顯示頁面。

因此,您需要一個具有使用該應用程序的確切域名(或通配符與確切域名匹配)的證書。並且證書需要在網站的確切域名變得知道的時間的同一時間或更晚的時間可用,並且不能提前獲得。

你似乎是,不知怎的,一個證書可以「創造」或「安裝」 SSL連接的誤解下。這是錯誤的。 Web服務器 - Apache,IIS,Nginx,LigHTTPD或者您碰巧使用的任何一個 - 都是知道如何處理SSL連接的各個方面的程序。該證書是只是一個文件 Web服務器發送給客戶端,甚至沒有以任何方式打開或使用。

此外,作者分發的網絡應用程序不負責創建或分發證書,也不應該被誤解爲他負責。只有網站維護人員應該負責爲他的網站獲取證書。正如另一個人所說的那樣,在您的安裝過程中或者在安裝後的過程中,您可能會要求安裝webapp的人員獲得證書。但這是你能做的最好的。

+0

如果它不是一個網站,但是RPC的內部IP端點? – odiszapc 2016-12-04 12:42:42

1

這些站點中的每一個都應該有自己的SSL證書。爲什麼不提示用戶在安裝過程中提供證書文件?

1

您可以做的最好的事情是購買通配符SSL證書 - 但是等等,這不是您的想法。您仍然需要提前知道第二級域名(TLD爲「.com」)。您可以有效地要求提供包含* .foo.com的證書 - 然後將覆蓋任何網站,a.foo.com和b.foo.com。當然,這些證書比FQDN證書更加昂貴,因爲您正在使用一些額外的硬幣來操作鑿子。

-Oisin

+0

oops,當然,謝謝。 – x0n 2009-12-18 22:39:46

0

在大多數(如果不是全部)的情況下,SSL證書與Web服務器(Apache時,IIS等)相關聯,而不是應用程序的一部分。這取決於Web服務器的管理員安裝證書,而不是您作爲程序的作者。

如果您的安裝程序確實有能力修改Web服務器配置,並且您願意讓它使用自簽名證書,則可以編寫證書的創建腳本以允許輸入域名。但是,我覺得這並不是真的可以提供給你。此外,自簽名證書通常會導致證書警告。

0

如果我理解正確,你有可能是你的問題的解決方案了。但是,如果您無法控制指定安裝程序的Web服務器(如其他人所述)提供的SSL證書,則此解決方案對您無能爲力。如果你的程序本身包含一個Web服務器,你將不會遇到這個問題。

如果你以一個值得信賴的HTTPS網站,你可以做跨域TLS(SSL)的XMLHttpRequest來運行你的應用程序的Web服務器。這可以使用開源Forge項目。該項目使用JavaScript編寫的TLS實現和小型Flash swf來處理跨域請求。您的程序需要提供XML Flash策略文件,以授予受信任網站訪問運行該應用程序的Web服務器的權限。

你的程序還需要生成自簽名的SSL證書,並把它上傳到受信賴的網站。從那裏,每個程序的證書可以通過JavaScript TLS實現被包含爲可信。或者,您可以使用適合您使用的通用或主題替代名稱(不一定是域名),讓程序上傳其證書以由您創建的CA進行簽名。然後,您可以使用JavaScript來信任CA證書,並在每個證書上查找正確的名稱。

有關詳細信息,在github上檢查出的Forge項目:

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

在年底博客文章的鏈接提供有關它是如何工作更深入的信息。