基本概念
HTTP:超文本傳輸協議HTTP協議被用于在Web瀏覽器和網站服務器之間傳遞信息,HTTP協議以明文方式發送內容,不提供任何方式的數據加密,因此,HTTP協議不適合傳輸一些敏感信息,比如:信用卡號、密碼等支付信息。
HTTPS:是以安全為目標的HTTP通道,簡單講是HTTP的安全版,即HTTP下加入SSL層,HTTPS的安全基礎是SSL(SSL記錄協議[SSL Record Protocol]),因此加密的詳細內容就需要SSL。
HTTPS協議的主要作用可以分為兩種:一種是建立一個信息安全通道,來保證數據傳輸的安全;另一種就是確認網站的真實性。
HTTPS和HTTP的區別
1. https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。
2. http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議。
3. http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。
4. http的連接很簡單,是無狀態的;
5. HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。
HTTPS最大的特點
HTTPS最大的特點是安全, 在保護用戶隱私,防止流量劫持方面發揮著非常關鍵的作用。主要有以下3點:
- 內容加密。瀏覽器到百度服務器的內容都是以加密形式傳輸,中間者無法直接查看原始內容。
- 身份認證。保證用戶訪問的是百度服務,即使被 DNS 劫持到了第三方站點,也會提醒用戶沒有訪問百度服務,有可能被劫持
- 數據完整性。防止內容被第三方冒充或者篡改。
HTTPS的缺點
1、證書費用以及更新維護。
2、HTTPS 降低一定用戶訪問速度(實際上優化好就不是缺點了)。
3、HTTPS 消耗 CPU 資源,需要增加大量機器。
HTTPS 網絡訪問過程
http協議下,用戶只需要完成 TCP 三次握手建立 TCP 連接就能夠直接發送 HTTP 請求獲取應用層數據,此外在整個訪問過程中也沒有需要消耗計算資源的地方。
HTTPS 的訪問過程,相比 HTTP 要復雜很多,在部分場景下,使用 HTTPS 訪問有可能增加 7 個 RTT。
- 三次握手建立 TCP 連接。耗時一個 RTT。
- 使用 HTTP 發起 GET 請求,服務端返回 302 跳轉到 https://www.baidu.com 。需要一個 RTT 以及 302 跳轉延時。
- 三次握手重新建立 TCP 連接。耗時一個 RTT。
- TLS 完全握手階段一。耗時至少一個 RTT。
- 解析 CA 站點的 DNS。耗時一個 RTT。
- 三次握手建立 CA 站點的 TCP 連接。耗時一個 RTT。
- 發起 OCSP 請求,獲取響應。耗時一個 RTT。
- 完全握手階段二,耗時一個 RTT 及計算時間。
- 完全握手結束后,瀏覽器和服務器之間進行應用層(也就是 HTTP)數據傳輸。
當然不是每個請求都需要增加 7 個 RTT 才能完成 HTTPS 首次請求交互。大概只有不到 0.01% 的請求才有可能需要經歷上述步驟。
HTTPS的性能優化
主要優化兩方面,訪問速度和計算性能。
HTTPS 訪問速度優化
- 設置HSTS,服務端返回一個 HSTS 的 http header,瀏覽器獲取到 HSTS 頭部之后,在一段時間內,不管用戶輸入www.baidu.com還是http://www.baidu.com,都會默認將請求內部跳轉成https://www.baidu.com。Chrome, firefox, ie 都支持了 HSTS。
- Session resume,復用session可以減少 CPU 消耗,因為不需要進行非對稱密鑰交換的計算??梢蕴嵘L問速度,不需要進行完全握手階段二,節省了一個 RTT 和計算耗時。復用有2種方式,Session cache和Session ticket。
- Nginx設置Ocsp stapling。Ocsp 全稱在線證書狀態檢查協議 (rfc6960),用來向 CA 站點查詢證書狀態,比如是否撤銷。通常情況下,瀏覽器使用 OCSP 協議發起查詢請求,CA 返回證書狀態內容,然后瀏覽器接受證書是否可信的狀態。這個過程非常消耗時間,因為 CA 站點有可能在國外,網絡不穩定,RTT 也比較大。如果不需要查詢則可節約時間。
- 使用 SPDY 或者 HTTP2。SPDY 最大的特性就是多路復用,能將多個 HTTP 請求在同一個連接上一起發出去,不像目前的 HTTP 協議一樣,只能串行地逐個發送請求。Pipeline 雖然支持多個請求一起發送,但是接收時依然得按照順序接收,本質上無法解決并發的問題。HTTP2支持多路復用,有同樣的效果。
- False start。簡單概括 False start 的原理就是在 clientkeyexchange 發出時將應用層數據一起發出來,能夠節省一個 RTT。
HTTPS 計算性能優化
- 優先使用 ECC橢圓加密算術。
- 使用最新版的 openssl。
- 硬件加速方案。
- TLS 遠程代理計算
喜歡小編文章的可以點個贊關注小編哦,小編每天都會給大家更新文章。