背景:根據客服對用戶信息的反饋,部分IOS啟動app很慢甚至超時,而安卓並無異常。
排查步驟
1.查看nginx的錯誤日志和服務端的處理日志,並沒有發現異常超時的記錄;
2.通過還原用戶使用場景,用戶發送請求到服務器接收到請求,產生了6-10s的延遲,這個直接導致ios 觸發原定的3s超時;
3.了解到用戶並非出於網絡較差環境,或者使用FQ軟件,於是將問題定位到https驗證;
4.因為ios為了促進app審查,使用了https來與服務器通信,而安卓則是跳過驗證,這點坐實了https驗證的問題。
解決思路
1.檢查https證書是否過期,發現各項證書均在有效期內;
2.通過ssllab.com測試域名的各項指標,發現TLS只支持到v1.0-v1.2,v1.3並無支持,而v1.3在驗證速度上比歷史版本塊,其中原因v1.3引入以下特性,速度有很大提升:
相比過去的的版本,引入了新的密鑰協商機制 — PSK
支持 0-RTT 數據傳輸,在建立連接時節省了往返時間
廢棄了 3DES、RC4、AES-CBC 等加密組件,廢棄了 SHA1、MD5 等哈希算法
ServerHello 之后的所有握手消息采取了加密操作,可見明文大大減少
不再允許對加密報文進行壓縮、不再允許雙方發起重協商
DSA 證書不再允許在 TLS 1.3 中使用
3.開啟OCSP(Online Certificate Status Protocal), 在nginx的server{}配置中增加以下配置
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/xxx.xxx.com/fullchain.pem;
resolver 8.8.8.8 8.8.4.4 1.1.1.1 valid=60s;
resolver_timeout 2s;
然后重啟nginx,在https://www.ssllabs.com/ssltest/index.html 驗證,OCSP stapling YES。
4.之后驗證https速度和http差不多了