Member-only story
中國封TLS 1.3嘅ESNI係乜鬼?
TLS/HTTPS未必係大家所諗嘅完全閂埋門冇人知你做乜
有報導指2020年8月初中國偉大發明之一GFW開始封鎖含有ESNI擴展訊息嘅TLS (SSL) connection,而ESNI係TLS v1.3先至有嘅擴展功能。不過唔係所有TLS v1.3都會用到ESNI,目前尚係少數。
咩係SNI?
眾所周知,我哋可以喺一個IP上面host好多個網站,各自有唔同嘅domain name (即name-based virtual hosting)。Browser會喺HTTP request之中講明要去邊個domain、具體邊條URL、同埋會夾埋埋cookie、POST等嘅內容入去。
為咗確保通訊係唔會俾第三方聽到,唔只係要將內容加密咁簡單,而仲要確保個server真係你想connect過去嘅server,而唔係一個第三方假扮嘅server (即MITM攻擊 — Man in the middle attack),所以喺send HTTP request上去之前要先確認對方身份先得。
TLS (SSL)中嘅certificate(証書)就係噉樣用。Certificate裏面會包含個domain name資料,而certificate係由Certificate Authority (CA)經過特定程序先會簽發俾server,server管理員自己無法竄改。Browser會通過比較certificate上嘅資料同自己即將要去嘅URL是否一致,以及certificate嘅signature(數字簽章)係唔係由CA名單入面其中一間簽發嘅,去認定connect緊嗰部server係咪就係嗰部server。
但噉樣就有雞同雞蛋嘅問題。
為咗安全,browser要喺send HTTP request之前拎到certificate,但server如果host緊好多網站,唔知你要去邊個domain name/URL,又點知應該呈上邊一張certificate俾browser睇?
因此就發明咗SNI (Server Name Indication),自2006年起陸陸續續得到OS/browser支援。個解決方法係,browser會喺一開始建立TLS connection嘅ClientHello信息當中,將要上去嘅domain name以明文方式寫住喺額頭…