578
阿裏雲
接入後HTTPS異常(SNI問題)__排錯手冊_Web 應用防火牆-阿裏雲
概述
當發現接入Web應用防火牆後,如果出現HTTPS訪問異常,可能是由於客戶端不支持SNI導致的
問題現象
如果客戶端不支持sni,可能會導致如下現象:
1.手機APP客戶端,ios客戶端可以正常訪問,而Android客戶端無法正常打開
2.瀏覽器打開網站,顯示證書不可信
問題原因:
隨著IPv4地址的短缺,為了讓多個域名複用一個IP地址,在HTTP服務器上引入了虛擬主機的概念,服務器可以根據客戶端請求中不同的host來將請求交給不同的域名(虛擬主機)來處理。
但在一個被多個域名(虛擬主機)共享IP的HTTPS服務器中,瀏覽器在訪問一個HTTPS站點時,先與服務器建立SSL連接,建立連接的第一步就是請求服務器的證書。而服務器在發送證書的時候,是不知道瀏覽器訪問的是哪個域名的,所以不能根據不同域名發送不同的證書。
SNI(Server Name Indication)是為了解決一個服務器使用多個域名和證書的SSL/TLS擴展。一句話簡述它的工作原理就是,在連接到服務器建立SSL鏈接之前先發送要訪問站點的域名(Hostname),這樣服務器根據這個域名返回一個合適的證書。目前,大多數操作係統和瀏覽器都已經很好地支持SNI擴展,OpenSSL 0.9.8已經內置這一功能,新版的nginx也支持SNI。
當使用不支持SNI的瀏覽器訪問Web應用防火牆的網站時,Web應用防火牆因不知道客戶端請求的是哪個域名,無法調取對應的虛擬主機證書來跟客戶端交互,隻能使用內置的一個缺省證書去跟客戶端握手,這時在客戶端瀏覽器上會提示“服務器證書不可信”,如下圖:
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., ,如果是微信、支付寶第三方回調。需要讓其調用源站IP,繞過Web應用防火牆
常見的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 ,及以上版本
如何判斷自己的客戶端是否支持SNI?
訪問https://sni.velox.ch/, 如果使用的客戶端(如瀏覽器)支持SNI,會提示下圖:
如果不支持SNI,則會提示證書不可信,繼續訪問後提示下圖:
最後更新:2016-12-01 20:05:28
上一篇:
登陸狀態丟失問題__排錯手冊_Web 應用防火牆-阿裏雲
下一篇:
接入狀態檢測異常__排錯手冊_Web 應用防火牆-阿裏雲
APP維度推送統計__API列表_OpenAPI 1.0_移動推送-阿裏雲
批量查看消息__隊列接口規範_API使用手冊_消息服務-阿裏雲
路由器接口__用戶指南_高速通道-阿裏雲
AddTags__標簽相關API_API 參考_負載均衡-阿裏雲
取消定時推送任務__推送相關_API 列表_OpenAPI 2.0_移動推送-阿裏雲
查詢任務列表__其他接口_API 參考_雲服務器 ECS-阿裏雲
阿裏雲付費用戶超百萬 營收增速降至96%
ALIYUN::ROS::WaitConditionHandle__資源列表_資源編排-阿裏雲
怎樣為一個子用戶授予隻讀訪問RDS的權限___雲數據庫(RDS)授權問題_授權常見問題_訪問控製-阿裏雲
阿裏雲雲服務器 ECS典型應用場景
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲