大型網站HTTPS實踐:HTTPS對性能的影響

作者 | 百度HTTPS技術支持團隊

百度已經上線了全站 HTTPS 的安全搜索,默認會將 HTTP 請求跳轉成 HTTPS。百度 HTTPS性能優化涉及到大量內容,從前端頁面、后端架構、協議特性、加密算法、流量調度、架構和運維、安全等方面都做了大量工作。本系列的文章將對此一一進行介紹。關注 OpenWeb開發者公眾號,回復“HTTPS”,即可查看相關文章。

HTTPS 在保護用戶隱私,防止流量劫持方面發揮著非常關鍵的作用,但與此同時,HTTPS 也會降低用戶訪問速度,增加網站服務器的計算資源消耗。本文主要介紹 HTTPS 對用戶體驗的影響。

HTTPS 對訪問速度的影響

在介紹速度優化策略之前,先來看下 HTTPS 對速度有什么影響。影響主要來自兩方面:

1、協議交互所增加的網絡 RTT(round trip time)。

2、加解密相關的計算耗時。

下面分別介紹一下。

網絡耗時增加

由于 HTTP 和 HTTPS 都需要 DNS 解析,并且大部分情況下使用了 DNS 緩存,為了突出對比效果,忽略主域名的 DNS 解析時間。

用戶使用 HTTP 協議訪問 http://www.baidu.com(或者 www.baidu.com) 時會有如下網絡上的交互耗時:
HTTP 首個請求的網絡耗時

可見,用戶只需要完成 TCP 三次握手建立 TCP 連接就能夠直接發送 HTTP 請求獲取應用層數據,此外在整個訪問過程中也沒有需要消耗計算資源的地方。

接下來看 HTTPS 的訪問過程,相比 HTTP 要復雜很多,在部分場景下,使用 HTTPS 訪問有可能增加 7 個 RTT。如下圖:

HTTPS 首次請求對訪問速度的影響
HTTPS 首次請求需要的網絡耗時解釋如下:

1、三次握手建立 TCP 連接。耗時一個 RTT。

2、使用 HTTP 發起 GET 請求,服務端返回 302 跳轉到 https://www.baidu.com 。需要一個 RTT 以及 302 跳轉延時。

大部分情況下用戶不會手動輸入 https://www.baidu.com 來訪問 HTTPS,服務端只能返回 302 強制瀏覽器跳轉到 https。

瀏覽器處理 302 跳轉也需要耗時。

3、三次握手重新建立 TCP 連接。耗時一個 RTT。

302 跳轉到 HTTPS 服務器之后,由于端口和服務器不同,需要重新完成三次握手,建立 TCP 連接。

4、TLS 完全握手階段一。耗時至少一個 RTT。

這個階段主要是完成加密套件的協商和證書的身份認證。

服務端和瀏覽器會協商出相同的密鑰交換算法、對稱加密算法、內容一致性校驗算法、證書簽名算法、橢圓曲線(非 ECC 算法不需要)等。

瀏覽器獲取到證書后需要校驗證書的有效性,比如是否過期,是否撤銷。

5、解析 CA 站點的 DNS。耗時一個 RTT。

瀏覽器獲取到證書后,有可能需要發起 OCSP 或者 CRL 請求,查詢證書狀態。

瀏覽器首先獲取證書里的 CA 域名。

如果沒有命中緩存,瀏覽器需要解析 CA 域名的 DNS。

6、三次握手建立 CA 站點的 TCP 連接。耗時一個 RTT。

DNS 解析到 IP 后,需要完成三次握手建立 TCP 連接。

7、發起 OCSP 請求,獲取響應。耗時一個 RTT。

8、完全握手階段二,耗時一個 RTT 及計算時間。

完全握手階段二主要是密鑰協商。

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。

計算耗時增加。

上節還只是簡單描述了 HTTPS 關鍵路徑上必須消耗的純網絡耗時,沒有包括非常消耗 CPU 資源的計算耗時,事實上計算耗時也不小(30ms 以上),從瀏覽器和服務器的角度分別介紹一下:

1、瀏覽器計算耗時

RSA 證書簽名校驗,瀏覽器需要解密簽名,計算證書哈希值。如果有多個證書鏈,瀏覽器需要校驗多個證書。

RSA 密鑰交換時,需要使用證書公鑰加密 premaster。耗時比較小,但如果手機性能比較差,可能也需要 1ms 的時間。

ECC 密鑰交換時,需要計算橢圓曲線的公私鑰。

ECC 密鑰交換時,需要使用證書公鑰解密獲取服務端發過來的 ECC 公鑰。

ECC 密鑰交換時,需要根據服務端公鑰計算 master key。

應用層數據對稱加解密。

應用層數據一致性校驗。

2、服務端計算耗時

RSA 密鑰交換時需要使用證書私鑰解密 premaster。這個過程非常消耗性能。

ECC 密鑰交換時,需要計算橢圓曲線的公私鑰。

ECC 密鑰交換時,需要使用證書私鑰加密 ECC 的公鑰。

ECC 密鑰交換時,需要根據瀏覽器公鑰計算共享的 master key。

應用層數據對稱加解密。

應用層數據一致性校驗。

由于客戶端的 CPU 和操作系統種類比較多,所以計算耗時不能一概而論。手機端的 HTTPS 計算會比較消耗性能,單純計算增加的延遲至少在 50ms 以上。PC 端也會增加至少 10ms 以上的計算延遲。

服務器的性能一般比較強,但由于 RSA 證書私鑰長度遠大于客戶端,所以服務端的計算延遲也會在 5ms 以上。

結束語

本系列的后續文章將進一步解釋針對性的優化措施。關注OpenWeb微信公眾號,回復“HTTPS”,即可查看本系列文章。

Brilliant Open Web

BOW(Brilliant Open Web)團隊,是一個專門的Web技術建設小組,致力于推動 Open Web 技術的發展,讓Web重新成為開發者的首選。

BOW 關注前端,關注Web;剖析技術、分享實踐;談談學習,也聊聊管理。

關注 OpenWeb開發者,回復“加群”,讓我們一起推動 OpenWeb技術的發展!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535876.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535876.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535876.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis(十三):Redis實現樂觀鎖

1、悲觀鎖與樂觀鎖 樂觀鎖和悲觀鎖是一種程序設計思想,而不是具體的代碼。樂觀鎖和悲觀鎖應用的場景有很多,在數據庫和多線程等等都會用到。 悲觀鎖:總是假設最壞的情況,每次去拿數據的時候都認為別人會修改,所以每次…

PWA將帶來新一輪大前端技術洗牌?

作者 | 彭星 編輯 | 尾尾 一、回顧歷史:移動時代之初,Web遭遇兩大枷鎖 Web 在移動時代遭遇兩大枷鎖1.Web 在移動時代遭遇兩大枷鎖 當 Web 自信滿滿,步入移動時代之時,它還沒有做好充足的準備。 回顧 2014 到 2015 年那段時間…

Redis(十四):Jedis

Jedis是Redis官方推薦的Java連接開發工具。要在Java開發中使用好Redis中間件&#xff0c;必須對Jedis熟悉才能寫成漂亮的代碼&#xff01; 1、新建Maven工程&#xff0c;導入對應依賴 <dependencies><dependency><groupId>redis.clients</groupId>&l…

高級精致智能快捷的Web設計原則案例

作者 | 百度搜索用戶體驗中心 《Web設計指南》分為設計原則、基礎規范兩方面主要內容&#xff0c;同時會提供相應的實際案例及資源下載。關注OpenWeb開發者&#xff0c;回復“設計指南”&#xff0c;即可獲取已發布資源。 設計原則之高級精致 簡潔并不等于粗糙沒有細節&#x…

Linux系列(一):簡介與目錄結構

1、Linux簡介 1.1、起源 Linux出現于1991年&#xff0c;是由芬蘭赫爾辛基大學學生Linus Torvalds和后來加入的眾多愛好者共同開發完成 1.2、Linux特點 多用戶&#xff0c;多任務&#xff0c;豐富的網絡功能&#xff0c;可靠的系統安全&#xff0c;良好的可移植性&#xff0c;…

日常問題——解決mac下 ssh: connect to host localhost port 22: Connection refused

問題描述&#xff1a; 今天使用ssh 登陸本地時即使用ssh localhost出現了 ssh: connect to host localhost port 22: Connection refused 錯誤&#xff01; 然后在網上看了很多的解決方案&#xff0c;也都是千篇一律&#xff0c;大多數是針對ssh安沒安裝的&#xff1f;那肯定是…

大型網站的HTTPS實踐:基于協議和配置的優化

作者 | 百度HTTPS技術支持團隊 百度已經上線了全站 HTTPS 的安全搜索&#xff0c;默認會將 HTTP 請求跳轉成 HTTPS。百度 HTTPS性能優化涉及到大量內容&#xff0c;在前端頁面、后端架構、協議特性、加密算法、流量調度、架構和運維、安全等方面都做了大量工作。本系列的文章將…

初識Hadoop:大數據與Hadoop概述

1、大數據概述 大數據&#xff08;big data&#xff09;&#xff0c;IT行業術語&#xff0c;是指無法在一定時間范圍內用常規軟件工具進行捕捉、管理和處理的數據集合&#xff0c;是需要新處理模式才能具有更強的決策力、洞察發現力和流程優化能力的海量、高增長率和多樣化的信…

W3C近期要聞:W3C戰略重點報告新版發布

作者 | W3C中國 「OpenWeb開發者」依托于BOW&#xff08;Brillant Open Web&#xff09;團隊&#xff0c;是一個專門的 Web 技術建設小組&#xff0c;致力于推動 OpenWeb 技術的發展&#xff0c;將不定期為讀者同步W3C要聞。 注&#xff1a;由于微信不支持外鏈&#xff0c;了解…

Hadoop的安裝及配置

PS:最新安裝教程請參考Hadoop的安裝與配置&#xff08;設置單節點群集&#xff09;詳細教程 1、Hadoop安裝前準備工作&#xff1a; 在開始Hadoop安裝與配置之前&#xff0c;需要準備的環境&#xff1a;Linux系統、配置JDK環境變量。 2、安裝 我們可以到Apache Hadoop的官網ht…

在 PWA 中使用 App Shell 模型提升性能和用戶感知體驗

作者&#xff5c;潘宇琪 編輯&#xff5c;Daisy 在構建 PWA 應用時&#xff0c;使用 App Shell 模型能夠在視覺和首屏加載速度方面帶來用戶體驗的提升。另外&#xff0c;在配合 Service Worker 離線緩存之后&#xff0c;用戶在后續訪問中將得到快速可靠的瀏覽體驗。 在實踐過…

【轉】超酷的 mip-infinitescroll 無限滾動(無限下拉)

寫在前面 無限滾動技術&#xff08;又叫做無限下拉技術&#xff09;被廣泛應用于新聞類&#xff0c;圖片預覽類網站。對用戶來講&#xff0c;使用無限滾動的頁面有源源不斷的信息可以預覽&#xff0c;增加用戶在頁面的停留時長。技術上原理也很簡單&#xff0c;在頁面加載時加…

日常問題——Mac下新建目錄報Read-only file system

問題描述&#xff1a; 今天在根目錄下&#xff0c;新建目錄時出現了Read-only file system提示為只讀的錯誤。電腦最近并沒有非正常關機之類可能導致文件損傷的操作&#xff0c;但是最近倒是進行了一次系統更新。 解決方案&#xff08;過程&#xff09;&#xff1a; 從系統更…

MongoDB(二):MongoDB的安裝

這里以OSX系統為例&#xff0c;window和linux可以參考https://www.runoob.com/mongodb/mongodb-linux-install.html 1、我們使用 curl 命令來下載安裝&#xff1a; # 進入 /usr/local cd /usr/local# 下載 sudo curl -O https://fastdl.mongodb.org/osx/mongodb-osx-ssl-x86_…

百度推出 MIP Baidu Path鏈接

在站長將站點 MIP 化時&#xff0c;需要關注 URL 的一共有三個&#xff1a;MIP URL, MIP-Cache URL 以及 MIP Baidu Path。 從 URL 說起 在互聯網中&#xff0c;URL 定義頁面的地址&#xff0c;每個 URL 對應一個頁面。而 MIP URL 則是 MIP 頁的原始地址&#xff0c;指向托管…

Postman接口測試(超詳細整理)

常用的接口測試工具主要有以下幾種 Postman&#xff1a;簡單方便的接口調試工具&#xff0c;便于分享和協作。具有接口調試&#xff0c;接口集管理&#xff0c;環境配置&#xff0c;參數化&#xff0c;斷言&#xff0c;批量執行&#xff0c;錄制接口&#xff0c;Mock Server, …

mip-link 組件功能升級說明

背景描述 某個頁面被多少頁面引用&#xff08;在其他頁面上有指向這個頁面的 a 標簽&#xff09;&#xff0c;是搜索引擎判斷這個頁面價值的其中一個因子。這里的搜索引擎不只是指百度&#xff0c;還包括國內外其他的搜索引擎。 MIP 在最初設計 MIP url 跳轉邏輯實現時&#…

日常問題——使用Xshell 連接虛擬機報錯 Disconnected from remote host

問題描述&#xff1a; 使用Xshell進行連接虛擬機的操作時出現了Disconnected from remote host的錯誤&#xff01; 解決方案&#xff08;過程&#xff09;&#xff1a; 1、vim /etc/ssh/sshd_config 2、#UseDNS yes改為UseDNS no 3、重啟service sshd restart 問題解決&…

【轉】AB實驗設計思路及實驗落地

這篇文章會討論&#xff1a; 1. 在什么情況下需要做 AB 實驗 2. 從產品/交互角度&#xff0c;如何設計一個實驗 3. 前端工程師如何打點 4. 如何統計數據&#xff0c;并保證數據準確可信 5. 如何分析實驗數據&#xff0c;有哪些數據需要重點關注 6. 附&#xff1a;如何搭建…

簡單實現MySQL數據實時增量同步到Kafka————Maxwell

任務需求&#xff1a;將MySQL里的數據實時增量同步到Kafka 1、準備工作 1.1、MySQL方面&#xff1a;開啟BinLog 1.1.1、修改my.cnf文件 vi /etc/my.cnf [mysqld] server-id 1 binlog_format ROW1.1.2、重啟MySQL,然后登陸到MySQL之后&#xff0c;查看是否已經修改過來: …