什么是 SNI?


參考: 鏈接1   鏈接2

介紹

是什么:SNI(Server Name Indication)是 TLS 的擴展,這允許在握手過程開始時通過客戶端告訴它正在連接的服務器的主機名稱。

作用:用來解決一個服務器擁有多個域名的情況。

在客戶端和服務端建立 HTTPS 的過程中要先進行 TLS 握手,握手后會將 HTTP 報文使用協商好的密鑰加密傳輸。

握手參考鏈接

在 TLS 握手信息中並沒有攜帶客戶端要訪問的目標地址。這樣會導致一個問題,如果一台服務器有多個虛擬主機,且每個主機的域名不一樣,使用了不一樣的證書,該和哪台虛擬主機進行通信?

和 HTTP 協議用來解決服務器多域名的方案類似:HTTP 在請求頭中使用 Host 字段來指定要訪問的域名。

TLS 的做法,也是加 Host,在 TLS 握手第一階段 ClientHello 的報文中添加。

SNI 在 TLSv1.2 開始得到支持。從 OpenSSL 0.9.8 版本開始支持。所以基本市場上的終端設備都支持。

測試

使用 WireShark 抓包看一下 Clien tHello:

SNI信息是在握手的過程中,確切說是在客戶端發送給服務端的第一個握手包中傳遞的信息。
這時候SSL連接還未建立起來,因此SNI信息是明文傳輸的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM