閱讀373 返回首頁    go 人物


高防/WAF中SNI引發的https訪問異常問題__運維問題_產品常見問題_DDoS 高防IP-阿裏雲

 

什麼是SNI

 

, 隨著,IPv4,地址的短缺,為了讓多個域名複用一個,IP,地址,我們在,HTTP,服務器上引入了虛擬主機的概念,服務器可以根據客戶端請求中不同的,host,來將請求交給不同的域名(虛擬主機)來處理。

,但在一個被多個域名(虛擬主機)共享,IP,的,HTTPS,服務器中,由於在握手建立之前服務器看不到客戶端請求的是哪個,host,,所以無法將請求交給特定的虛擬主機;而要完成握手,又必須讀取虛擬主機配置中的證書信息。SNI(,Server Name Indication,)就是用來解決這個看似矛盾的問題,它要求客戶端在與服務器握手時就攜帶要訪問域名的,host,信息,這樣服務器就知道用哪個虛擬主機的證書去跟客戶端握手並建立,TSL,連接了。

,SNI,最早在,2004年就提出了,目前主流的新版瀏覽器、服務器和測試工具都已支持,詳情請參考最後一部分。

 

為什麼高防/WAF中必須要求客戶端支持SNI

 

,高防,/WAF,在反向代理,HTTPS,業務時,需要代理客戶端去跟真實服務器(,RS,)交互,所以需要在配置,HTTPS,防護時上傳證書和私鑰。真實的高防和,WAF服務器,數量是有限的,對於用戶上萬的域名顯然不可能滿足一個域名一台物理服務器,,所以整個高防,/WAF,集群必然要多個域名複用相同的服務器,,這樣就要求客戶端必須支持,SNI,,才能正常與高防,/WAF,交互。

,當使用不支持,SNI,的瀏覽器訪問高防,/WAF,防護的網站時,高防,/WAF,因不知道客戶端請求的是哪個域名,無法調取對應的虛擬主機證書來跟客戶端交互,隻能使用內置的一個缺省證書去跟客戶端握手,這時在客戶端瀏覽器上會提示,“,服務器證書不可信,”,,如下圖:

 ,

注意:即便RS隻有一個域名(即沒有複用IP),可以不需要支持SNI,但因為高防/WAF在中間反向代理,而客戶端必須先與高防/WAF建立連接,所以還是需要客戶端支持SNI的。

 

 Nginx/Apache的服務器端SNI實現

 

, 如需要配置服務器支持,SNI,,可參考這兩篇文章:

,Nginx,:,https://www.ttlsa.com/web/multiple-https-host-nginx-with-a-ip-configuration/

,Apache,:,https://www.ttlsa.com/apache/multi-https-virtual-host-apache-mod_gnutls/

 

客戶端不支持SNI如何解決

 

, SNI,是一個很便利的擴展,隨著,IPv4,地址的耗盡,全麵支持,SNI,是趨勢。對於不支持,SNI,的客戶端,我們有兩個解決方案:

,1.,  ,建議用戶升級或使用新版本的瀏覽器,如,Chrome,、,Firefox,等(強烈推薦)

,2.,  ,在高防,不配置七層網站防護,隻采用四層,443,端口轉發(風險:無法防護,CC,攻擊)

 

 常見的SNI支持情況

 

注意: SNI兼容TLS1.0及以上的協議,但不被SSL支持。

,桌麵版瀏覽器支持

  • ,Chrome 5,及以上版本
  • ,Chrome 6,及以上版本(,Windows XP,)
  • ,Firefox 2,及以上版本
  • ,IE 7,及以上版本(運行在,Windows Vista/Server 2008,及以上版本版本係統中,,在,XP,係統中任何版本的,IE,瀏覽器都不支持,SNI,)
  • ,Konqueror 4.7 ,及以上版本
  • ,Opera 8 ,及以上版本
  • ,Safari 3.0 on Windows Vista/Server 2008 ,及以上版本,, or Mac OS X 10.5.6 ,及以上版本

 

,手機端瀏覽器支持

  • ,Android Browser on 3.0 Honeycomb ,及以上版本
  • ,iOS Safari on iOS 4 ,及以上版本
  • ,Windows Phone 7 ,及以上版本

 

,服務器支持

  • , Apache 2.2.12 ,及以上版本
  • ,Apache Traffic Server 3.2.0 ,及以上版本
  • ,Cherokee
  • ,HAProxy 1.5 ,及以上版本
  • ,IIS 8.0 ,及以上版本
  • ,lighttpd 1.4.24 ,及以上版本
  • ,LiteSpeed 4.1 ,及以上版本
  • ,nginx 0.5.32 ,及以上版本

 

,命令行支持

  • ,cURL 7.18.1 ,及以上版本
  • ,wget 1.14 ,及以上版本

 

,庫支持

  • , GNU TLS
  • ,JSSE (Oracle Java) 7 ,及以上版本,, ,僅作為客戶端
  • ,libcurl 7.18.1 ,及以上版本
  • ,NSS 3.1.1 ,及以上版本
  • ,OpenSSL 0.9.8j ,及以上版本
  • ,OpenSSL 0.9.8f ,及以上版本,需配置,flag
  • ,Qt 4.8 ,及以上版本

 

最後更新:2016-07-12 13:53:02

  上一篇:go 新購買ECS或重置ECS後安全部署方法__技術分享_技術運維問題_漏洞掃描-阿裏雲
  下一篇:go 防禦WordPress反射_阿裏雲幫助中心-阿裏雲,領先的雲計算服務提供商