HTTPS簡單學習

前言

八月初的時候有幸在參與了一場公司內部的講座分享,如今各大公司都在進行從HTTPHTTPS的遷移,這部分勢必會對前端的性能測速產生影響,因此瞭解HTTPS基本對前端也是有必要html

HTTP的差別

HTTP的URL由「http://」起始且默認使用端口80不一樣,HTTPS的URL由「https://」起始且默認使用端口443。前端

HTTP是不安全的,且攻擊者經過監聽和中間人攻擊等手段,能夠獲取網站賬戶和敏感信息等。HTTPS被設計爲可防止前述攻擊,並(在沒有使用舊版本的SSL時)被認爲是安全的。算法

SSL/TLS協議解決的問題

  • 全部信息都是加密傳播,第三方沒法竊聽。segmentfault

  • 具備校驗機制,一旦被篡改,通訊雙方會馬上發現。瀏覽器

  • 配備身份證書,防止身份被冒充安全

SSL/TLS 握手過程

客戶端發出請求(ClientHello)

客戶端(一般是瀏覽器)先向服務器發出加密通訊的請求,這被叫作ClientHello請求。
在這一步,客戶端主要向服務器提供如下信息。服務器

  1. 支持的協議版本,好比TLS 1.0版。session

  2. 一個客戶端生成的隨機數,稍後用於生成"對話密鑰"。dom

  3. 支持的加密方法,好比RSA公鑰加密。性能

  4. 支持的壓縮方法。

服務器迴應(SeverHello)

服務器收到客戶端請求後,向客戶端發出迴應,這叫作SeverHello。服務器的迴應包含如下內容。

  1. 確認使用的加密通訊協議版本,好比TLS 1.0版本。若是瀏覽器與服務器支持的版本不一致,服務器關閉加密通訊。

  2. 一個服務器生成的隨機數,稍後用於生成"對話密鑰"。

  3. 確認使用的加密方法,好比RSA公鑰加密。

  4. 服務器證書。

客戶端迴應

客戶端收到服務器迴應之後,首先驗證服務器證書。若是證書不是可信機構頒佈、或者證書中的域名與實際域名不一致、或者證書已通過期,就會向訪問者顯示一個警告,由其選擇是否還要繼續通訊。
若是證書沒有問題,客戶端就會從證書中取出服務器的公鑰。而後,向服務器發送下面三項信息。
(1) 一個隨機數。該隨機數用服務器公鑰加密,防止被竊聽。
(2) 編碼改變通知,表示隨後的信息都將用雙方商定的加密方法和密鑰發送。
(3) 客戶端握手結束通知,表示客戶端的握手階段已經結束。這一項同時也是前面發送的全部內容的hash值,用來供服務器校驗。

服務器的最後迴應

服務器收到客戶端的第三個隨機數pre-master key以後,計算生成本次會話所用的"會話密鑰"。而後,向客戶端最後發送下面信息。
(1)編碼改變通知,表示隨後的信息都將用雙方商定的加密方法和密鑰發送。
(2)服務器握手結束通知,表示服務器的握手階段已經結束。這一項同時也是前面發送的全部內容的hash值,用來供客戶端校驗。
至此,整個握手階段所有結束。接下來,客戶端與服務器進入加密通訊,就徹底是使用普通的HTTP協議,只不過用"會話密鑰"加密內容。

如下例子能夠總結整個握手過程:
握手階段分紅五步。
第一步,愛麗絲給出協議版本號、一個客戶端生成的隨機數(Client random),以及客戶端支持的加密方法。
第二步,鮑勃確認雙方使用的加密方法,並給出數字證書、以及一個服務器生成的隨機數(Server random)。
第三步,愛麗絲確認數字證書有效,而後生成一個新的隨機數(Premaster secret),並使用數字證書中的公鑰,加密這個隨機數,發給鮑勃。
第四步,鮑勃使用本身的私鑰,獲取愛麗絲髮來的隨機數(即Premaster secret)。
第五步,愛麗絲和鮑勃根據約定的加密方法,使用前面的三個隨機數,生成"對話密鑰"(session key),用來加密接下來的整個對話過程。

握手階段有三點須要注意。

  1. 生成對話密鑰一共須要三個隨機數。

  2. 握手以後的對話使用"對話密鑰"加密(對稱加密),服務器的公鑰和私鑰只用於加密和解密"對話密鑰"(非對稱加密),無其餘做用。

  3. 服務器公鑰放在服務器的數字證書之中。

HTTPS性能

測量HTTPS連接耗時的方法

HTTP耗時 = TCP握手
HTTPs耗時 = TCP握手 + SSL握手

因此,HTTPS確定比HTTP耗時,這就叫SSL延遲。

  • 加密/解密的過程是須要消耗時間的
    畢竟須要對傳輸的數據進行加密/解密,算法耗時是確定有的。

  • 交換公鑰/私鑰消耗時間
    HTTPS傳輸在傳輸以前是須要再服務端與客戶端交換公鑰/私鑰的,這個過程也是很是耗時的。有統計稱HTTPS的連接耗時是HTTP的鏈接耗時的3倍。

  • 重定向消耗時間
    這裏還有一個影響速度的點,那就是用戶在瀏覽器中輸入網址的時候,是不會去本身輸入https協議頭的,若是你在瀏覽器中輸入www.jd.com的話,默認瀏覽器訪問的是http://www.jd.com的,若是咱們想要用戶訪問https的網站的話,就要本身進行一次網頁重定向,重定向也是比較耗時的操做。這都會對咱們的網站速度形成影響。

HTTPS發展趨勢

  • https everywhere,http2主流實現強制使用https

  • 加密強度增長

  • 證書開源免費

  • 速度提高, Tls1.3 減小握手

參考資料

wiki百科
阮一峯老師的博客
聊一聊HTTPS那些事兒

相關文章
相關標籤/搜索