伺服器如何決定使用哪個版本的 TLS?

伺服器如何決定使用哪個版本的 TLS?

我知道現在客戶端和伺服器之間存在協商...但是是什麼決定瞭如何伺服器選擇回應 https 請求時將使用的 TLS 版本?例如,它如何將連線限制為最低版本的 TLS?另外,伺服器使用的安全性憑證和伺服器使用的 TLS 版本之間是否存在關係?我正在閱讀一些 AWS 文檔,它似乎表明了這一點。

這裡完全是新手;如果這是錯誤的詢問,請道歉。我不介意一個連結來閱讀,作為答案。

答案1

但是,什麼決定了伺服器在回應 https 請求時如何選擇將使用的 TLS 版本?

在 TLS 握手中,客戶端向伺服器宣布它可以執行的最佳版本。如果伺服器支援的協定版本等於或小於客戶端版本,它將以其中最好的版本回應。如果伺服器不支援這些,握手將會失敗。如果伺服器回覆客戶端不支援的版本,握手也會失敗。

另外,伺服器使用的安全性憑證和伺服器使用的 TLS 版本之間是否存在關係?

TLS協定版本和使用的憑證之間幾乎沒有關係。早已過時的 SSLv3 和協定的 TLS 1.x 版本之間存在細微差別,因為只有 TLS 1.x 支援擴充。一個重要的擴展是server_nameSNI - 伺服器名稱指示),其中客戶端指定它想要到達的域。如果在同一 IP 位址上有多個證書,伺服器可以選擇適當的證書。

答案2

我不是 TLS 協議握手協商專家,所以這裡是一個“粗略”的答案(專家,如果我錯了請糾正我)*我在這裡只談論 TLS 版本。不是密碼。

場景 1:您的客戶端將嘗試可以使用的最高版本的 TLS。假設您的客戶端支援 1.1(舊)和 1.2。然後,伺服器將使用盡可能高的版本連接您。希望是1.2。

情境 2:您的用戶端支援 1.2 或更高版本,而您的伺服器是一台舊的且未更新的機器,只了解 1.1。

場景 3:與 2 相同,但方向相反。連接也行不通。

您的客戶端將無法協商連線。它會停在那裡。

場景 4:您的客戶端以及伺服器都支援版本 1.1 和 1.2,但假設伺服器管理員配置(假設 Apache HTTPD)強制僅使用 1.2 進行連接,那麼您的客戶端將使用 1.2。

另外,還有 TLS 1.3......但這將是相同的心態。

相關內容