大型網站的 HTTPS 實踐(二):HTTPS 對效能的影響
1 前言
HTTPS 在保護使用者隱私,防止流量劫持方面發揮著非常關鍵的作用,但與此同時,HTTPS 也會降低使用者訪問速度,增加網站伺服器的計算資源消耗。
本文主要介紹 https 對使用者體驗的影響。
2 HTTPS 對訪問速度的影響
在介紹速度最佳化策略之前,先來看下 HTTPS 對速度有什麼影響。影響主要來自兩方面:
- 協議互動所增加的網路 RTT(round trip time)。
- 加解密相關的計算耗時。
下面分別介紹一下。
2.1 網路耗時增加
由於 HTTP 和 HTTPS 都需要 DNS 解析,並且大部分情況下使用了 DNS 快取,為了突出對比效果,忽略主域名的 DNS 解析時間。
使用者使用 HTTP 協議訪問http://www.baidu.com(或者 www.baidu.com) 時會有如下網路上的互動耗時:
圖 1 HTTP 首個請求的網路耗時
可見,使用者只需要完成 TCP 三次握手建立 TCP 連線就能夠直接傳送 HTTP 請求獲取應用層資料,此外在整個訪問過程中也沒有需要消耗計算資源的地方。
接下來看 HTTPS 的訪問過程,相比 HTTP 要複雜很多,在部分場景下,使用 HTTPS 訪問有可能增加 7 個 RTT。如下圖:
圖 2 HTTPS 首次請求對訪問速度的影響
HTTPS 首次請求需要的網路耗時解釋如下:
- 三次握手建立 TCP 連線。耗時一個 RTT。
- 使用 HTTP 發起 GET 請求,服務端返回 302 跳轉到 https://www.baidu.com。需要一個 RTT 以及 302 跳轉延時。
- 大部分情況下使用者不會手動輸入 https://www.baidu.com 來訪問 HTTPS,服務端只能返回 302 強制瀏覽器跳轉到 https。
- 瀏覽器處理 302 跳轉也需要耗時。
- 三次握手重新建立 TCP 連線。耗時一個 RTT。
- 302 跳轉到 HTTPS 伺服器之後,由於埠和伺服器不同,需要重新完成三次握手,建立 TCP 連線。
- TLS 完全握手階段一。耗時至少一個 RTT。
- 這個階段主要是完成加密套件的協商和證書的身份認證。
- 服務端和瀏覽器會協商出相同的金鑰交換演算法、對稱加密演算法、內容一致性校驗演算法、證書籤名演算法、橢圓曲線(非 ECC 演算法不需要)等。
- 瀏覽器獲取到證書後需要校驗證書的有效性,比如是否過期,是否撤銷。
- 解析 CA 站點的 DNS。耗時一個 RTT。
- 瀏覽器獲取到證書後,有可能需要發起 OCSP 或者 CRL 請求,查詢證書狀態。
- 瀏覽器首先獲取證書裡的 CA 域名。
- 如果沒有命中快取,瀏覽器需要解析 CA 域名的 DNS。
- 三次握手建立 CA 站點的 TCP 連線。耗時一個 RTT。
- DNS 解析到 IP 後,需要完成三次握手建立 TCP 連線。
- 發起 OCSP 請求,獲取響應。耗時一個 RTT。
- 完全握手階段二,耗時一個 RTT 及計算時間。
- 完全握手階段二主要是金鑰協商。
- 完全握手結束後,瀏覽器和伺服器之間進行應用層(也就是 HTTP)資料傳輸。
當然不是每個請求都需要增加 7 個 RTT 才能完成 HTTPS 首次請求互動。大概只有不到 0.01% 的請求才有可能需要經歷上述步驟,它們需要滿足如下條件:
- 必須是首次請求。即建立 TCP 連線後發起的第一個請求,該連線上的後續請求都不需要再發生上述行為。
- 必須要發生完全握手,而正常情況下 80% 的請求能實現簡化握手。
- 瀏覽器需要開啟 OCSP 或者 CRL 功能。Chrome 預設關閉了 ocsp 功能,firefox 和 IE 都預設開啟。
- 瀏覽器沒有命中 OCSP 快取。Ocsp 一般的更新週期是 7 天,firefox 的查詢週期也是 7 天,也就說是 7 天中才會發生一次 ocsp 的查詢。
- 瀏覽器沒有命中 CA 站點的 DNS 快取。只有沒命中 DNS 快取的情況下才會解析 CA 的 DNS。
2.2 計算耗時增加
上節還只是簡單描述了 HTTPS 關鍵路徑上必須消耗的純網路耗時,沒有包括非常消耗 CPU 資源的計算耗時,事實上計算耗時也不小(30ms 以上),從瀏覽器和伺服器的角度分別介紹一下:
- 瀏覽器計算耗時
- RSA 證書籤名校驗,瀏覽器需要解密簽名,計算證書雜湊值。如果有多個證書鏈,瀏覽器需要校驗多個證書。
- RSA 金鑰交換時,需要使用證書公鑰加密 premaster。耗時比較小,但如果手機效能比較差,可能也需要 1ms 的時間。
- ECC 金鑰交換時,需要計算橢圓曲線的公私鑰。
- ECC 金鑰交換時,需要使用證書公鑰解密獲取服務端發過來的 ECC 公鑰。
- ECC 金鑰交換時,需要根據服務端公鑰計算 master key。
- 應用層資料對稱加解密。
- 應用層資料一致性校驗。
- 服務端計算耗時
- RSA 金鑰交換時需要使用證書私鑰解密 premaster。這個過程非常消耗效能。
- ECC 金鑰交換時,需要計算橢圓曲線的公私鑰。
- ECC 金鑰交換時,需要使用證書私鑰加密 ECC 的公鑰。
- ECC 金鑰交換時,需要根據瀏覽器公鑰計算共享的 master key。
- 應用層資料對稱加解密。
- 應用層資料一致性校驗。
由於客戶端的 CPU 和作業系統種類比較多,所以計算耗時不能一概而論。手機端的 HTTPS 計算會比較消耗效能,單純計算增加的延遲至少在 50ms 以上。PC 端也會增加至少 10ms 以上的計算延遲。
伺服器的效能一般比較強,但由於 RSA 證書私鑰長度遠大於客戶端,所以服務端的計算延遲也會在 5ms 以上。
3 結束語
本系列的後續文章將進一步解釋針對性的最佳化措施。
相關文章
- 大型網站的 HTTPS 實踐(二)——HTTPS 對效能的影響網站HTTP
- 大型網站的HTTPS實踐(三)——HTTPS對效能的影響網站HTTP
- 大型網站的HTTPS實踐(二)——HTTPS加密演算法介紹網站HTTP加密演算法
- 大型網站的HTTPS實踐(一)——HTTPS協議和原理網站HTTP協議
- 大型網站的 HTTPS 實踐(一): HTTPS 協議和原理網站HTTP協議
- 大型網站的 HTTPS 實踐(一)—— HTTPS 協議和原理網站HTTP協議
- 大型網站的 HTTPS 實踐(四):協議層以外的實踐網站HTTP協議
- 大型網站的 HTTPS 實踐(四)——協議層以外的實踐網站HTTP協議
- 大型網站的 HTTPS 實踐(3):基於協議和配置的優化網站HTTP協議優化
- 大型網站的 HTTPS 實踐(三):基於協議和配置的優化網站HTTP協議優化
- 大型網站的 HTTPS 實踐(三)——基於協議和配置的優化網站HTTP協議優化
- HTTP和HTTPS有什麼區別?如何實現網站的HTTPS?HTTP網站
- 影響你網站效能的 5 個瓶頸網站
- 給自己的網站加上HTTPS網站HTTP
- 中科三方:設定SSL證書升級HTTPS對網站最佳化有哪些影響?HTTP網站
- 網站實現HTTPS的詳細流程介紹網站HTTP
- 小程式https請求,http網站升到httpsHTTP網站
- 什麼是https?網站啟動https的好處有哪些?HTTP網站
- HTTPS安全最佳實踐HTTP
- HTTPS最佳安全實踐HTTP
- 如何獲取網站的HTTPS證書?網站HTTP
- 你的網站還沒用上 HTTPS 嗎網站HTTP
- 我的網站HTTPS改造全程詳解網站HTTP
- 免費給自己的網站加 HTTPS網站HTTP
- 軟體的效能設計(二) 臨時物件對軟體效能的影響 (轉)物件
- 網站實現https加密比http的優勢有哪些網站HTTP加密
- JAVA 異常對於效能的影響Java
- https理論與實踐HTTP
- 海外代理IP地址對網站SEO的影響和作用網站
- 使用Let’s Encrypt實現網站https化網站HTTP
- HTTPS SPDY和 HTTP/2效能的簡單對比HTTP
- 如何免費的讓網站啟用HTTPS網站HTTP
- Nginx配置網站預設httpsNginx網站HTTP
- 【轉載】大型網站效能網站
- DB2 HADR對效能的影響DB2
- InnoDB 隔離模式對 MySQL 效能的影響模式MySql
- 使用letsencrypt實現https站點HTTP
- 虛擬主機對網站有哪些影響?網站