大型網站的HTTPS實踐(二)-- HTTPS對效能的影響

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

1 前言

HTTPS在保護使用者隱私,防止流量劫持方面發揮著非常關鍵的作用,但與此同時,HTTPS也會降低使用者訪問速度,增加網站伺服器的計算資源消耗。
本文主要介紹https對使用者體驗的影響。
本文最早發表於百度營運部官方部落格

2 HTTPS對訪問速度的影響

在介紹速度最佳化策略之前,先來看下HTTPS對速度有什麼影響。影響主要來自兩方面:
1. 協議互動所增加的網路RTT(round trip time)。
2. 加解密相關的計算耗時。

下面分別介紹一下。

2.1 網路耗時增加

由於 HTTP和HTTPS都需要DNS解析,並且大部分情況下使用了DNS緩衝,為了突出對比效果,忽略主網域名稱的DNS解析時間。
使用者使用HTTP協議訪問http://www.baidu.com(或者www.baidu.com)時會有如下網路上的互動耗時:

可見,使用者只需要完成TCP三向交握建立TCP串連就能夠直接發送HTTP請求擷取應用程式層資料,此外在整個訪問過程中也沒有需要消耗計算資源的地方。
接下來看HTTPS的訪問過程,相比HTTP要複雜很多,在部分情境下,使用HTTPS訪問有可能增加7個RTT。如:

HTTPS首次請求需要的網路耗時解釋如下:
1. 三向交握建立TCP串連。耗時一個RTT。
2. 使用HTTP發起GET請求,服務端返回302跳轉到https://www.baidu.com。需要一個RTT以及302跳轉延時。
a) 大部分情況下使用者不會手動輸入https://www.baidu.com來訪問HTTPS,服務端只能返回302強制瀏覽器跳轉到https。
b) 瀏覽器處理302跳轉也需要耗時。
3. 三向交握重建立立TCP串連。耗時一個RTT。
a) 302跳轉到HTTPS伺服器之後,由於連接埠和伺服器不同,需要重新完成三向交握,建立TCP串連。
4. TLS完全握手階段一。耗時至少一個RTT。
a) 這個階段主要是完成加密套件的協商和認證的身份認證。
b) 服務端和瀏覽器會協商出相同的金鑰交換演算法、對稱式加密演算法、內容一致性校正演算法、認證簽名演算法、橢圓曲線(非ECC演算法不需要)等。
c) 瀏覽器擷取到認證後需要校正認證的有效性,比如是否到期,是否撤銷。
5. 解析CA網站的DNS。耗時一個RTT。
a) 瀏覽器擷取到認證後,有可能需要發起OCSP或者CRL請求,查詢認證狀態。
b) 瀏覽器首先擷取認證裡的CA網域名稱。
c) 如果沒有命中緩衝,瀏覽器需要解析CA網域名稱的DNS。
6. 三向交握建立CA網站的TCP串連。耗時一個RTT。
a) DNS解析到IP後,需要完成三向交握建立TCP串連。
7. 發起OCSP請求,擷取響應。耗時一個RTT。
8. 完全握手階段二,耗時一個RTT及計算時間。
a) 完全握手階段二主要是密鑰協商。
9. 完全握手結束後,瀏覽器和伺服器之間進行應用程式層(也就是HTTP)資料轉送。
當然不是每個請求都需要增加7個RTT才能完成HTTPS首次請求互動。大概只有不到0.01%的請求才有可能需要經曆上述步驟,它們需要滿足如下條件:
1. 必須是首次請求。即建立TCP串連後發起的第一個請求,該串連上的後續請求都不需要再發生上述行為。
2. 必須要發生完全握手,而正常情況下80%的請求能實現簡化握手。
3. 瀏覽器需要開啟OCSP或者CRL功能。Chrome預設關閉了ocsp功能,firefox和IE都預設開啟。
4. 瀏覽器沒有命中OCSP緩衝。Ocsp一般的更新周期是7天,firefox的查詢周期也是7天,也就說是7天中才會發生一次ocsp的查詢。
5. 瀏覽器沒有命中CA網站的DNS緩衝。只有沒命中DNS緩衝的情況下才會解析CA的DNS。

2.2 計算耗時增加

上節還只是簡單描述了HTTPS關鍵路徑上必須消耗的純網路耗時,沒有包括非常消耗CPU資源的計算耗時,事實上計算耗時也不小(30ms以上),從瀏覽器和伺服器的角度分別介紹一下:
1, 瀏覽器計算耗時
a) RSA認證簽名校正,瀏覽器需要解密簽名,計算認證雜湊值。如果有多個憑證鏈結,瀏覽器需要校正多個認證。
b) RSA金鑰交換時,需要使用認證公開金鑰加密premaster。耗時比較小,但如果手機效能比較差,可能也需要1ms的時間。
c) ECC金鑰交換時,需要計算橢圓曲線的公私密金鑰。
d) ECC金鑰交換時,需要使用認證公開金鑰解密擷取服務端發過來的ECC公開金鑰。
e) ECC金鑰交換時,需要根據服務端公開金鑰計算master key。
f) 應用程式層資料對稱加解密。
g) 應用程式層資料一致性校正。
2, 服務端計算耗時
a) RSA金鑰交換時需要使用認證私密金鑰解密premaster。這個過程非常消耗效能。
b) ECC金鑰交換時,需要計算橢圓曲線的公私密金鑰。
c) ECC金鑰交換時,需要使用認證私密金鑰加密ECC的公開金鑰。
d) ECC金鑰交換時,需要根據瀏覽器公開金鑰計算共用的master key。
e) 應用程式層資料對稱加解密。
f) 應用程式層資料一致性校正。
由於用戶端的CPU和作業系統種類比較多,所以計算耗時不能一概而論。手機端的HTTPS計算會比較消耗效能,單純計算增加的延遲至少在50ms以上。PC端也會增加至少10ms以上的計算延遲。
伺服器的效能一般比較強,但由於RSA認證私密金鑰長度遠大於用戶端,所以服務端的計算延遲也會在5ms以上。

3 結束語

本系列的後續文章將進一步解釋針對性的最佳化措施。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.