HTTP是明文傳輸,存在安全隱患,須要加密方案。git
在協議棧中,將HTTP和TCP之間插入一個安全層,對HTTP發起的請求進行加密,對接收到的HTTP響應進行解密。api
名詞解釋:
- 加密套件:指加密的方法。
- 對稱加密:加密和解密使用相同的密鑰。
- 非對稱加密:有A/B兩把密鑰,A密鑰加密只能B密鑰來解密,B密鑰加密只能A密鑰來解密。服務器使用一對公鑰和私鑰來進行非對稱加密。公鑰是公開的,私鑰不公開。
- 數字證書(Digital Certificate):一個權威機構——CA(Cetificate Authority)給服務器頒發的證書。 數字證書有兩個做用:證實服務器身份,包含服務器公鑰。
傳輸數據階段使用對稱加密,對稱加密的密鑰使用非對稱加密來傳輸。瀏覽器
完整的握手流程:
- 瀏覽器向服務器發送對稱加密套件列表、非對稱加密套件列表和隨機數client-random;
- 服務器選擇一個對稱加密套件和一個非對稱加密套件,和一個本身生成的隨機數service-random、連同數字證書一塊兒返回給瀏覽器;
- 瀏覽器驗證數字證書合法性,若是合法,使用client-random和service-random生成第三個隨機數pre-master,使用證書中的公鑰加密,發送給服務器;
- 服務器使用本身的私鑰解密出pre-master數據,並返回確認消息。
- 瀏覽器和服務器利用client-random、service-random、pre-master三組隨機數,使用同一套方法生成對稱密鑰master secret,以後雙方使用這個密鑰進行數據傳輸。
申請數字證書流程:
- 準備一套公鑰和私鑰
- 向CA機構提交本身的身份信息包括公鑰、公司、站點等信息並等待認證,認證過程可能會收費
- CA經過線上、線下多種渠道驗證該信息真實性,如公司是否存在、企業是否合法、域名是否歸屬該企業等;
- 審覈經過後,CA會簽發一個認證的數字證書,包含申請信息中的公鑰、組織信息、CA的信息、有效時間、證書序列號、數字簽名等明文信息。
數字簽名過程:
- CA使用Hash函數計算申請信息得出摘要信息
- CA使用本身的私鑰對信息摘要進行加密,生成數字簽名
瀏覽器驗證數字證書流程:
- 瀏覽器會驗證證書的有效期;
- 驗證證書是否被吊銷:有兩種方式:一種是下載吊銷證書列表CRL(Certificate Revocation Lists),一種是在線驗證OCSP(Online Certificate Status Protocol);
- 驗證證書是否是CA頒發的:
- 瀏覽器讀取證書中的相關明文信息,使用CA簽名時相同的Hash函數計算的到信息摘要A
- 使用對應CA的公鑰解密數字簽名獲得信息摘要B
- 對比信息摘要AB是否一致
- 驗證CA機構的合法性:瀏覽器會繼續查找給這個CA頒發證書的CA,再以一樣的方式驗證它上級CA的可靠性。一般操做系統中會內置信任的頂級CA證書信息(包括公鑰),若是這個CA鏈中沒有找到瀏覽器內置的頂級CA,證書也會被斷定非法。內置CA對應的證書稱爲根證書,根證書是最權威的機構,它們本身爲本身簽名,被稱爲自簽名證書。
瀏覽器如何獲取CA公鑰:
部署HTTP服務器時,保護了部署當前的數字證書以外,還要部署CA機構的數字證書,CA機構的數字證書包括了CA的公鑰和CA機構的一些基礎信息。 創建HTTPS連接時,服務器會將兩個證書一塊兒發送給瀏覽器。 若是服務器沒有部署CA的數字證書,瀏覽器還能夠經過網絡下載CA證書,這種方式多了一次證書下載流程,會拖慢首次打開頁面的請求速度,通常不推薦使用。安全
關於CA:
頒發證書的機構分爲兩種類型:根CA和中間CA,通常申請者都是向中間CA申請證書。一個根CA能夠認證不少中間CA,這些中間CA又能夠去認證其餘中間CA,造成一個樹狀結構的數字證書鏈。能夠沿着證書鏈從用戶證書追溯到根證書。服務器
瀏覽器驗證服務器證書,若是合法,再驗證CA證書,若是合法再驗證這個中間CA的根證書。 判斷根證書合不合法,只需判斷這個根證書在不在操做系統裏。markdown
若是一個機構想成爲根CA,並讓它的根證書內置到操做系統中,須要先經過WebTrust國際安全審計認證。 WebTrust 是由兩大著名註冊會計師協會 AICPA(美國註冊會計師協會)和 CICA(加拿大註冊會計師協會)共同制定的安全審計標準,主要對互聯網服務商的系統及業務運做邏輯安全性、保密性等共計七項內容進行近乎嚴苛的審查和鑑證。 只有經過 WebTrust國際安全審計認證,根證書才能預裝到主流的操做系統,併成爲一個可信的認證機構。 目前經過 WebTrust 認證的根 CA 有 Comodo、geotrust、rapidssl、symantec、thawte、digicert 等。也就是說,這些根 CA 機構的根證書都內置在個大操做系統中,只要能從數字證書鏈往上追溯到這幾個根證書,瀏覽器就會認爲使用者的證書是合法的。網絡