
我編寫了一個 ASP.NET MVC 應用程序,讓使用者可以指定自己的自訂網域。我將 IIS 配置為將所有請求傳送到預設網站,因此我不需要使用主機標頭。一切都很完美。唯一的問題是 SSL。
我知道這個問題已在許多論壇中多次被問到,但答案通常是衝突的或絕對的(這是不可能做到的)。這對我來說並不是一個真正的選擇。我在這裡尋找的是一些選擇;我對非常規持開放態度:)。
我看到了一些建設性的回复,建議使用 ISA 伺服器作為 SSL 代理。有人知道更多嗎?或是有人配置過這個並且成功了嗎?
基本上,我想為我的用戶提供一種從應用程式請求 CSR、購買並下載 SSL 憑證、返回我的應用程式並上傳由授權認證公司頒發的憑證的方法。
我希望無需向想要在其網站上使用自訂網域和 ssl 的客戶提供單獨的 IP 位址即可執行此操作。這只是因為我的應用程式託管在亞馬遜雲端上,他們不熱衷於為我提供大量 IP 位址。
我的應用程式可以託管在 IIS6 或 IIS7 上。
解決方案:感謝您對這些人的所有幫助。我當然沒有像現在這樣理解這個問題。我認為我現在的解決方案是產生通配符證書,並強制我的客戶使用 clientname.someshareddomain.com(如果他們想要安全連線)。對於對此不滿意的客戶,我可能會透過api 呼叫亞馬遜Web 服務來提供另一個彈性IP 位址,在IIS 中建立一個新網站並將其指向我的應用程式的根資料夾,然後以程式設計方式從中產生CSR新網站。我只需要與亞馬遜達成某種協議,為我提供一組像樣的 IP 位址。
答案1
我很抱歉您不喜歡“您不能這樣做”的答案,但您無法做您想做的事。該技術不允許它按照您想要的方式工作。
原因如下。
HTTP 協定允許多個伺服器共用一個 IP 位址。它透過 HTTP/1.1 主機標頭執行此操作:
Host: servername.example.com
SSL 握手發生前HTTP 握手發生。這意味著伺服器不知道根據客戶端想要的伺服器向客戶端提供什麼憑證。
因此,盡你所能,但不能在單一 IP 位址上使用多個憑證。無論你多努力,也無論你多努力,這都不適合你。
答案2
正如麥可所說,如果某件事是不可能的,那麼跺腳、噘嘴並不能改變事情。
從技術上講,將單獨的 SSL 憑證放在單獨的 IP 位址上並不是問題;這只是一個配置問題(這是一個簡單的程式設計問題),並且擁有一個了解大型公司需求並願意為 SSL 網域預先分配適當大小的位址區塊的網路供應商。
然而,還有另一種選擇,稱為“伺服器名稱指示”,瀏覽器可以在SSL 協商時告訴伺服器它想要與哪個虛擬主機通信,以便伺服器可以提供正確的憑證。不幸的是,對此的支援並不普遍;根據上面的維基百科頁面,IIS 6 都沒有Nor 7 無法在伺服器端處理它,並且您需要運行 Vista 才能在客戶端與 IE 一起使用它(Firefox、Opera 和 Chrome 都已經支援它一段時間了)。
因此,如果您願意切換到像樣的 Web 伺服器,並疏遠仍在舊版 Microsoft 作業系統上使用過時瀏覽器的用戶群中的任何部分,那麼您可以使用它。不過,似乎沒有人想惹惱在 Windows 98 上運行 IE 5.5 的蒂莉阿姨…
答案3
如果問題是關於提供安全性會話(而不是關於每個客戶擁有自己的憑證),為什麼不使用通配符 SSL 憑證來消除負擔和複雜性呢?