Ssl

Web 伺服器如何知道用於 SSL 解密的密鑰對?

  • December 26, 2016

據我了解,當 Apache 收到對它正在偵聽的 TCP 埠之一(例如 80、443)的請求時,它將通過查看 HTTP 標頭來決定正在請求哪個主機Host。然後伺服器將知道它應該將請求重定向到哪個虛擬主機。

但是它是如何通過 SSL/TLS 實現 HTTP 的呢?由於整個 HTTP 請求都被加密了(至少我相信我在某處讀過),所以只有在伺服器解密數據後才能讀取標頭資訊。但是為了解密,它需要知道使用哪個密鑰對,因為您可以在 Web 伺服器上安裝多個 SSL 證書。

那麼伺服器如何知道解密需要哪個密鑰呢?


我的猜測: 我可以想像 TLS 握手提供了必要的資訊。


關於“可能重複”標誌:

雖然我同意連結問題和我自己的問題的答案是相似的,但我必須說這個問題是不同的。毫無疑問,是否可以或如何使用獨立的 SSL 證書託管多個站點。相反,我的問題解決了潛在的技術方面。

最初,Web 伺服器並不知道。這就是您需要為要在伺服器上託管的每個 SSL 虛擬主機提供單獨 IP 地址的原因。這樣,伺服器就知道當 IP X 上的連接進入時,他需要使用相關虛擬主機的配置(包括證書)。

這隨著Server Name Indication改變了,這是一個 TLS 擴展,它確實允許客戶端在握手過程中指示所需的主機名。此擴展在所有現代作業系統中都使用,但舊的瀏覽器或伺服器不支持它,因此如果您希望客戶端仍然在 WinXP 上使用 IE 6,那麼您將不走運。

引用自:https://serverfault.com/questions/822722