抓包定位業務首次響應為什麼需要等待幾十秒
- 2019 年 12 月 10 日
- 筆記
1 本次案例IOS APP使用HTTPS協議打開業務超過幾十秒根因
序號 |
內容 |
---|---|
1 |
證書的CA OCSP Server IP,中國大陸無法訪問,中國香港可以訪問。 |
2 |
客戶端網路從中國大陸調整到中國香港,訪問慢的場景消失。 |
3 |
根因 基於以上測試結果,中國大陸使用HTTPS協議訪問業務出現慢的情況,因CA OCSP Server IP地址被限制,客戶端長時間等待伺服器端的響應導致。 |
4 |
解決方案請查詢下文 4根治解決方案 & 5臨時規避方案。 |
5 |
IOS&MAC證書吊銷檢測機制,請查詢參考文獻12。 |
2 問題定位過程
2.1 背景描述
序號 |
內容 |
---|---|
1 |
2019年11月28日,XXX有限公司向騰訊雲報障,大量用戶使用APP訪問騰訊雲伺服器承載的業務,打開首頁需要幾十秒。(此時多家大客戶同時回饋類似問題) |
2 |
客戶端網路:包含移動,聯通,電信4G和WIFI場景下均有問題。 |
3 |
客戶端:只有IOS/MACOS系統會有問題,Android/Windows系統沒有出現。 |
2.2 用戶的業務架構梳理
序號 |
名稱 |
內容 |
---|---|---|
1 |
客戶設備 |
蘋果手機IOS和蘋果電腦MACOS |
2 |
客戶網路 |
移動網路4G和固網wifi(聯通,電信,移動) |
3 |
負載均衡 |
客戶端訪問負載均衡為TCP 443 |
4 |
伺服器端 |
伺服器端Nginx & PHP-Fpm |
2.3 問題定位
2.3.1 定位問題是否是負載均衡引起:
2.3.1.1 客戶端越過負載均衡,直接訪問伺服器,客戶端訪問業務慢場景依然存在。
2.3.1.2 結論,測試得出問題與負載均衡沒有關係。
2.3.2 定位問題是否同CVM內的動態和靜態服務程式有關:
2.3.2.1 單獨訪問動態資源和靜態資源,均出現慢的場景。
2.3.2.2 結論,訪問業務慢同伺服器動態和靜態服務程式沒有關係。
2.3.3 定位問題是否和伺服器使用協議有關:
2.3.3.1 HTTP訪問業務,客戶端訪問慢的場景消失。
2.3.3.2 HTTPS訪問業務,客戶端訪問慢的場景再次出現。
2.3.3.3 測試定位到業務慢與HTTPS協議有關。
2.3.3.4 HTTP與HTTPS最大差異在SSL/TLS。
2.3.4 抓包分析HTTP/HTTPS:
2.3.4.1 抓包環境準備如下:
2.3.4.1.1 客戶端使用蘋果手機
2.3.4.1.2 電腦上安裝抓包工具Charles
2.3.4.1.3 客戶端和抓包工具在同一個區域網
2.3.4.1.4 蘋果手機內配置代理,手機所有訪問互聯網的請求全部經過電腦上的Charles抓包工具。
拓撲如下:
2.3.4.2 HTTP/HTTPS報文分析,定位到客戶端訪問ocsp.sectigo.com無響應
Charles捕獲HTTP&HTTPS請求,客戶端get ocsp.sectigo.com域名,服務長時間沒有響應,如下圖:
2.3.4.3 通過公共DNS解析域名ocsp.sectigo.com獲得IP
2.3.3.4 IP連通性定位,中國大陸無法訪問 ocsp.sectigo.com 域名解析IP的80埠
2.3.3.5 IP連通性定位,中國香港可以訪問 ocsp.sectigo.com 域名解析IP的80埠
2.3.3.6 客戶端訪問業務慢定位結論
1 因蘋果設備驗證證書的特性,客戶端發起OCSP校驗。
2 中國大陸網路無法訪問OCSP Server,OCSP校驗得不到響應,長時間等待校驗結果,導致業務打開頁面慢。
3 OCSP Server 中國大陸為什麼無法訪問?經測試得出IP被國際互聯網限制導致中國大陸無法訪問。
3 根治解決方案
3.1 證書替換,使用Symantec/GeoTrust/TrustAsia/GlobalSign上述廠商的證書。
3.1.1 上述廠商的CA OCSP Server ,基於地域的不同部署了多套,中國大陸和海外同時部署,可以規避中國大陸無法訪問的問題。
3.1.2 騰訊雲證書申請流程 https://cloud.tencent.com/document/product/214/6989
`備註:
如何確定證書OCSP Server部署多套?
用 myssl.com 網站檢測你的域名,獲取證書OCSP域名,檢測前確定你的網站已經完成HTTPS部署。
用 www.17ce.com 檢測OCSP域名,如果全球解析出來的IP地址有多個證明,OCSP Server 有多套。`
3.2 伺服器端開啟OCSPs(Stapling)
3.2.1 證書有效性校驗直接在Server端校驗,無需客戶端到OCSP Server校驗證書是否有效。
3.2.2 OCSPs 配置手冊 https://cloud.tencent.com/developer/article/1153244
4 臨時規避方案
4.1 HTTPS協議臨時切換至HTTP協議,規避方案優劣勢:
4.1.1 優勢:
保障用戶可以正常訪問業務。
業務可以正常穩定持續運行。
4.1.2 弊端:
協議切換至HTTP存在一定的安全性。
4.1.3 規避方案應用
將優勢弊端提供給用戶,用戶評估確定是否使用。
5 證書吊銷狀態檢測方式
5.1 證書吊銷狀態常規檢測方式 CRL & OCSP
5.1.1 CRL
CRL(Certificate revocation list 證書吊銷列表)是一個已經被吊銷的數字證書的名單,這些在證書吊銷列表中的證書不再會受到信任。CA會定期更新發布撤銷證書列表,RFC 5280: Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile。
CRL分布在公共可用的存儲庫中,瀏覽器可以在驗證證書時獲取並查閱CA的最新CRL。該方法的一個缺陷是撤銷的時間粒度限於CRL發布周期。只有在計劃更新所有當前發布的CRL之後,才會通知瀏覽器撤銷。
各家簽名CA廠商的策略不一樣,有的是幾小時,有的是幾天,甚至幾周。
5.1.1.1 CRL 檢測流程如下圖:
5.1.1.2 CLR方案存在的問題:
1 瀏覽器校驗證書狀態時,會獲取CRL,如果CRL量多或尺寸較大的話下載可能存在延遲。
2 證書吊銷周期更新存在延遲,因各家簽名CA廠商的策略不一樣,有的是幾小時,有的是幾天,甚至幾周。
3 解決方案如5.1.2 OCSP
***
5.1.2 OCSP
OCSP(Online Certificate Status Protocol)是一個用於獲取X.509數字證書撤銷狀態的協議,在RCF 6960中定義,作為證書吊銷列表的替代品解決公開密鑰基礎建設(PKI)中使用證書吊銷列表而帶來的多個問題。OCSP協議數據傳輸過程中使用ASN.1編碼,並通常創建在HTTP協議上。
在RFC2560X.509 Internet Public Key Infrastructure Online Certificate Status Protocol– OCSP的描述中,瀏覽器從在線OCSP伺服器(也稱為OCSP Response Server)請求證書的撤銷狀態,OCSP Server予以響應。這種方法避免CRL更新延遲問題。
5.1.2.1 OCSP 檢測流程如下圖:
5.1.2.2 OCSP方案存在的問題:
1 瀏覽器發起HTTPS請求,證書的有效性需要瀏覽器連接OCSP Server進行驗證,有的瀏覽器所在網路與OCSP Server的網路並不是通暢的會有網路延遲,如果花費較長的網路傳輸時間,會嚴重影響用戶訪問業務體驗。
2 在瀏覽器發送伺服器HTTPS證書序號到OCSP Server時使用HTTP協議,將暴露用戶的隱私,存在一定的安全性。
3 如果瀏覽器得不到OCSP Server響應會存在下列問題:
3.1 默認選擇拒絕該證書資訊,並且拒絕後續的HTTPS通訊,這個方式稱之為Hard-fail,如果是hard-fail模式,瀏覽器對任何HTTPS伺服器訪問的先決條件都取決於OCSP Server,這將是一個致命的單點故障,對於具有資深架構設計經驗的你來說,你會這麼選擇嗎?
3.2 默認選擇信任該證書,認為沒有被吊銷,那麼這個方式稱之為Soft-fail,如果是soft-fail模式,取不到OCSP Server的響應就忽略,要這個機制還有啥意義呢?
3.3 解決方案如5.1.3 OCSP Stapling
***
5.1.3 OCSP Stapling
OCSP裝訂,是TLS證書狀態查詢擴展,作為在線證書狀態協議的替代方法對X.509證書狀態進行查詢,伺服器在TLS握手時發送事先快取的OCSP響應,用戶只要驗證該響應的時效性而不用再向數字證書認證機構(CA)發送請求,可以加快握手速度。
5.1.3.1 OCSPs 檢測流程如下圖:
5.1.3.2 OCSPs 方案存在的問題:
1 WEB Server 會定期去 OCSP Server 更新證書狀態快取,一樣會面臨OCSP Server請求不到,或者沒有響應的問題,WEB Server 給瀏覽器響應時,瀏覽器還會面臨hard-fail,soft-fail選擇問題。
2 解決方案如5.1.4 OCSP Must-Staple
5.1.4 OCSP Must-Staple
面對hard-fail、soft-fail的問題,各家瀏覽器廠商的態度都不一樣。
同時不管瀏覽器如何選擇,都不能滿足廣大域名用戶的需求,那麼不如把這個選擇交給域名用戶自己。
因此OCSP Must-Staple應然而生了,瀏覽器必須檢測OCSP響應。域名證書創建時,自定義設定啟用這個選項,將這個資訊打入X.509 v3的擴展中,瀏覽器讀取後,強制進行OCSP檢測,走hard-fail模式。這個規範被起草在 X.509v3 Extension: OCSP Stapling Required draft-hallambaker-muststaple-00 ,不過暫未被採納為RFC標準。
6 參考文獻
序號 |
內容 |
---|---|
01 |
|
02 |
|
03 |
|
04 |
|
05 |
|
06 |
|
07 |
|
08 |
|
09 |
|
10 |
|
11 |
|
12 |
|