背景
HTTP爲明文傳輸,起初設計HTTP協議的目的很單純,就是爲了傳輸超文本文件,那時候也沒有太強的加密傳輸數據需求,因此HTTP一直保持着明文傳輸數據的特徵。正是由於這一特性,傳輸過程當中的每一個環節,數據都有可能被篡改或竊取。算法
引入安全層
所以咱們須要引入一個加密方案。 從HTTP協議棧層面來看,能夠在TCP和HTTP以前插入一個安全層,全部通過安全層的數據都會加密或者解密。瀏覽器
一般HTTP直接和TCP通訊,HTTPS則先和安全層通訊,而後安全層再和TCP層通訊。能夠歸納爲兩個職責:安全
- 對發起HTTP請求的數據進行加密操做
- 對接收到HTTP的內容進行解密操做
初版:使用對稱加密
對稱加密即指加密和解密用的是相同的密鑰 在HTTPS發送該數據以前,瀏覽器和服務器之間須要協商加密方式和密鑰,過程以下服務器
- 瀏覽器發送它所支持的加密套件列表(加密的方法)和一個隨機數client-random
- 服務器從加密套件列表中選取一個加密套件,而後還會生成一個隨機數service-random,並將service-random和加密套件列表返回給瀏覽器
- 瀏覽器和服務端分別返回確認消息
- 瀏覽器和服務端利用相同的方法把client-random和service-random混合起來生成一個密鑰master secret,而後開始進行數據的加密傳輸
缺點: client-random和seervice-random傳輸過程是明文的,黑客也能夠拿到協商的加密套件和雙方的隨機數,黑客也能夠合成密鑰dom
第二版:使用非對稱加密
非對稱加密算法有A、B兩把密鑰,若是你用A密鑰來加密,那麼只能使用B密鑰來解密。 服務器會本身保留私鑰,而後將公鑰以明文的方法發給瀏覽器函數
- 首先瀏覽器仍是將加密套件列表發給服務器
- 服務器會選擇一個加密套件,而後將加密套件和公鑰一塊兒發送給瀏覽器
- 而後就是瀏覽器和服務器返回確認消息
- 這樣瀏覽器在發送數據時就可使用該公鑰來加密數據,而後服務器使用私鑰來解密數據
缺點:網站
- 非對稱加密效率過低,影響頁面打開速度
- 沒法保證服務器發送給瀏覽器的數據安全,服務端採用私鑰加密,只能用公鑰解密,黑客也是能夠獲取到公鑰的,從而能夠解開數據
第三版 對稱加密和非對稱加密搭配使用
基於以上兩點缺點,能夠選擇一個更加完美的方案,在傳輸數據階段依然使用對稱加密,可是對稱加密的密鑰咱們採用非對稱加密來傳輸加密
- 瀏覽器向服務器發送對稱加密套件列表、非對稱加密套件列表和隨機數client-random
- 服務器保存隨機數client-random,選擇對稱加密和非對稱加密的套件,而後生成隨機數service-random,向瀏覽器發送選擇的加密套件、serice-random和公鑰
- 瀏覽器保存公鑰,利用client-random和service-random計算出來pre-master,而後利用公鑰對pre-master加密,並向服務器發送加密後的數據
- 服務器拿出本身的私鑰,解密出pre-master數據,並返回確認消息
- 經過這三組隨機數生成對稱密鑰,使用對稱加密的方式來傳輸數據
pre-master是通過公鑰加密以後傳輸的,因此黑客沒法獲取到pre-master,這樣黑客就沒法生成密鑰,也就保證了黑客沒法解密傳輸過程當中的數據了操作系統
第四版 添加數字證書
以上方式仍然存在問題,例如訪問百度時,黑客有可能經過dns劫持將ip地址替換成黑客的ip地址,這樣訪問的就是黑客的服務器,黑客能夠在本身的服務器上實現公鑰和私鑰。 那麼怎麼證實訪問的服務器是百度的,就須要使用權威機構(Certiificate Atuthority)頒發的數字證書(Diital Certificate)。設計
對於瀏覽器來講,數字證書有兩個做用:
1)向瀏覽器證實服務器身份
2)數字證書中包含了服務器的公鑰
數字證書的申請和驗證
申請數字證書
- 服務器準備一套私鑰和公鑰,私鑰留着本身使用
- 向CA機構提交公鑰、公司、站點等信息並等待認證
- CA經過線上、線下多種渠道來驗證網站所提供信息的真實性
- 審覈經過,會頒發認證的數字證書,包含網站的公鑰、組織信息、CA信息、有效時間、證書序列號,同時包含一個CA生成的數字簽名
簽名:CA使用Hash函數計算網站提交的明文信息,並得出信息摘要,而後再使用他的私鑰對信息摘要進行加密,加密後的祕聞就是數字簽名
瀏覽器如何驗證數字證書
- 讀取證書中的明文信息,採用CA簽名時相同的hash函數計算並獲得信息摘要A,再利用對應CA的公鑰解密簽名數據,獲得信息摘要B; 對比二者若是一致,則說明證書合法
- 這時候驗證了CA是誰,可是瀏覽器不知道該不應信任,就會繼續查找給這個CA頒發證書的CA, 再以一樣的方式驗證它上級CA的可靠性。一般操做系統會內置信任的頂級CA的證書信息,若是這個CA鏈中沒有找到瀏覽器內置的頂級CA,證書也會被斷定非法
參考
極客時間《瀏覽器原理與實踐》