前言: 網上聊 HTTPS 的文章已經數都數不過來了吧,厚着臉皮,整理下讀書筆記,結合日常項目的實踐,也來聊聊 HTTPS。瀏覽器
衆所周知,HTTP 協議具備無鏈接、不可靠、盡最大努力的特色,這也爲 HTPP 協議帶來信息竊聽或身份假裝等安全問題。主要體如今幾個方面:安全
那要如何作到防止竊聽保護信息呢?最爲普及的就是加密技術。服務器
SSL 協議最初是由瀏覽器開發商網景通訊公司率先倡導的,開發過 SSL3.0 以前的版本。IETF 以 SSL3.0 爲基準,後又制定了 TLS1.0、TLS1.1 和 TLS1.2。TSL 是以 SSL爲原型開發的協議,有時會統一稱該協議爲 SSL。當前主流的版本是 SSL3.0 和 TLS1.0。網絡
SSL 不只提供加密處理,並且還使用了一種被稱爲證書的手段,可用於肯定通訊方。阿里雲
HTTPS 具備加密、認證以及完整性保護的功能。加密
客戶端和服務端想要進行安全的通訊,首先想到的就是對通訊雙方的內容進行加密處理。客戶端利用「密鑰」加密內容,服務端利用「密鑰」解密內容,反之亦然。這種方式稱爲對稱(共享密鑰)加密。3d
對稱加密客戶端和服務端的「密鑰」是一致的,所以,客戶端和服務端之間的「密鑰」傳輸不可避免,若是「密鑰」在傳輸途中被盜用,那麼加密處理就沒有意義了。blog
那麼如何保護「密鑰」的傳輸安全呢?實踐的思路是非對稱(公開密鑰)加密,服務端擁有 公鑰(public key)+ 私鑰(private key)的密鑰對,公鑰任何人均可以獲取,私鑰只保存在服務端。如下是 SSL 創建安全通訊線路的過程。ip
非對稱加密「密鑰」的方式很好的保障了「密鑰」的安全傳輸,由於即便傳輸過程當中加密串被盜用了,因爲盜用者沒有私鑰信息,也沒法獲得加密串中的「密鑰」信息。內存
HTTPS 採用對稱(共享密鑰)加密和非對稱(公開密鑰)加密二者並用的混合加密機制。之因此要這麼複雜,是由於非對稱加密的處理速度相較於對稱加密要慢,所以,咱們通常在交換「密鑰」環節使用非對稱加密,以後的創建通訊交換報文階段則使用對稱加密方式。
遺憾的是,非對稱加密傳輸「密鑰」的方式仍然有缺陷,那就是沒法證實服務器公鑰自己就是貨真價實的公鑰。好比,接收到某臺服務器的公鑰,如何證實公鑰就是本來預想的那臺服務器發行的公鑰呢?或許在公鑰傳輸途中,真正的公鑰已經被攻擊者替換掉了。
計算機科學領域的任何問題均可以經過增長一個間接的中間層來解決。
這裏咱們引入的中間層就是數字證書認證機構(CA,Certificate Authority),數字證書認證機構處於客戶端與服務器雙方均可信賴的第三方機構的立場上,如下是數字證書認證機構的業務流程。
HTTPS 中還可使用客戶端證書,以客戶端證書進行客戶端認證,證實服務器正在通訊的對方始終是預料以內的客戶端,其做用跟服務器證書一模一樣。
使用 OpenSSL 這套開源程序,每一個人均可以構建一套屬於本身的認證機構,從而本身給本身頒發服務器證書,但該服務器證書在互聯網上不可做爲證書使用,由於我的並非可信任的三方機構。
基於 SSL 進行 HTTP 通訊時,應用層發送數據會附加一種叫作 MAC(Message Authentication Code)的報文摘要,MAC 可以查知報文是否遭到篡改,從而保護報文的完整性。
CBC 模式(Cipher Block Chaining)又名密碼分組連接模式。在此模式下,將前一個明文塊加密處理後和下一個明文塊作 XOR 運算,使之重疊,而後再對運算結果作加密處理。 對第一個明文塊作加密時,要麼使用前一段密文的最後一塊,要麼利用外部生成的初始向量(initial vector, IV)。
處理速度上,因爲 HTTPS 還須要作服務器、客戶端雙方加密及解密過程,所以會消耗 CPU 和內存等硬件資源。
通訊上,和單純 HTTP 通訊相比,SSL 通訊會消耗部分網絡資源。
綜上所述,相較於 HTTP 通訊來講,HTTPS 通訊速度會變慢。針對速度變慢這一問題,並無根本性的解決方案,咱們會使用 SSL 加速器這種(專用服務器)硬件來改善該問題。 該硬件爲 SS通訊專用硬件,相對軟件來說,可以提升數倍 SSL 的計算速度。
另外,SSL 證書的費用開銷也是使用 HTTPS 的考慮因素之一(阿里雲/騰訊雲有免費的 SSL 證書能夠申請使用)。