為何多個 http 的 80 埠的站點可以共用同一個伺服器(IP),而 https 卻不行?

就那IIS來說,IIS可以託管多個http的80埠都沒問題,但是https的站點默認443埠卻只能有一個站點。要想多個https的站點都託管在這個IIS上,則必須使用不同的埠了。請問這樣的設計是什麼原因?


誰告訴你不行的?!

SNI拿來吃的?


並不是https不能在一個埠上綁定多個域名,而是伺服器在不知道訪問域名是什麼之前,就需要發送數字證書。而證書直接和域名相關,客戶端會根據證書允許的域名是不是當前訪問的域名來判斷證書的有效性。

後來人們覺得一個埠只能有一張證書太傻了,就發明了SNI,讓程序可以根據域名選擇證書。

所以題主的問題的解決方案:

沒有SNI的情況,你必須將你要在這個IP下掛的所有域名都申請到同一張證書上。

或者安裝SNI擴展(新版本的Web伺服器已經默認支持,你只需要改下配置文件)。


題主可能用的是老版本的IIS。IIS從8版本開始支持SNI,所以升級到Windows Server 2012就可以用了。http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-server-name-indication-sni-ssl-scalability


同一台伺服器,同樣的ip地址,是可以對於多個HTTPS的。不過因為https會涉及到證書問題,所以在部署伺服器的時候應該分別添加各個url的證書。

比如我個人的伺服器,部署在aws上。有

個人博客: https://zhukangfeng.xyz

個人開發的小程序: https://yoursave.tk

openID服務系統: https://simpleid.tk

...

個人部署了很多服務。都放在同一個伺服器上,當然這些url對應的ip都是一樣的,而且都是443埠。

這個主要利用了Apache的虛擬主機的方法。配置方法還是比較簡單的。有心情的童鞋可以自己上度娘查一下Apache配置虛擬主機。


現在主要是SNI。


https服務需要數字證書,而這個數字證書是對本伺服器全局且唯一有效的,數字證書又與域名相關,故https只能掛一個域名。

如有不對,請斧正。


沒有用過IIS, 但是在liunx系統上, 無論apache, 還是nginx 都可以放多個http(80), 多個https(443) 網站。

當然, 證書有很多種, 有些證書要求獨立IP, 有些證書只管域名, 只要key和csr一致, 從一個伺服器移動另一個伺服器, 只需要將證書相關文件複製即可。


推薦閱讀:

如何寫一個web伺服器?
Web 伺服器與應用伺服器的區別是什麼?
如果伺服器所在的內網進行物理隔離(斷開互聯網連接),黑客有辦法突破並竊取到其中的信息嗎?
如何選擇國外的伺服器?
類似coc這種全球同服,並且註冊玩家與在線玩家龐大的遊戲,伺服器端架構該如何設計呢?

TAG:伺服器 | 信息安全 | SSL | HTTPS | 證書 |