HTTPS的基礎理論知識
首先推薦一本書,《HTTP權威指南》我就是看這本書入門的,對http協議有了更好的理解,學習https的理論知識我認為需要了解以下幾點,需要一步步的深入學習:
1、HTTPS的基本概念?
2、HTTPS和HTTP的差別?HTTP + 資料加密技術 =HTTPS ?HTTPS 所謂的安全是指哪裡安全?
3、HTTPS 的詳細互動過程?
4、基礎的密碼學知識學習:數字加密,對稱金鑰,非對稱金鑰,數字簽名,數字證書的基本概念。
5、使用openssl怎麼製造自簽證書?
6、實現簡單的https的客戶端和伺服器端(Python版本)
7、利用wireshake抓包進一步分析HTTPS協議
8、實際專案開發過程中遇到的問題總結
其中1-3個點,放在本筆記中,4放在同系列學習筆記二下;5放在同系列學習筆記三下;6放在同系列學習筆記四下;7放在同系列學習筆記五下
一、HTTPS的基本概念
HTTPS 是最流行的HTTP 安全形式。它是由網景公司首創的,所有主要的瀏覽器和伺服器都支援此協議。HTTPS 的URL 以https://,而不是http:// 開頭,據此就可以分辨某個Web 頁面是通過HTTPS 而不是HTTP 訪問的。
HTTPS = HTTP + SSL(TLS),HTTPS 就是在安全的傳輸層上傳送的HTTP。如下圖所示:HTTPS 沒有將未加密的HTTP 報文傳送給TCP,它在將HTTP 報文傳送給TCP 之前,先將其傳送給了一個安全層,對其進行加密。現在,HTTP 安全層是通過SSL 及其現代替代協議TLS 來實現的。我們遵循常見的用法,用術語SSL 來表示SSL 或者TLS。
二、HTTPS與HTTP的區別
HTTP + 業務資料加密技術 ≠ HTTPS ;因為 HTTPS = HTTP + SSL(TLS),SSL ≠ 業務資料加密技術;SSL是安全層,建立SSL隧道需要做隧道認證,至少要完成單向認證(伺服器認證)或者雙向認證,之後資料在傳輸的過程中都進行了加密處理;通常HTTP使用的在業務層做的資料欄位的加密,是業務資料的加密,傳輸的過程中是沒有加密的;而HTTPS的加密是指傳輸層的加密。HTTPS跟HTTP相比,有以下幾個明顯的優點:
• 伺服器認證(客戶端知道它們是在與真正的而不是偽造的伺服器通話);
• 客戶端認證(伺服器知道它們是在與真正的而不是偽造的客戶端通話),通常現在web服務,不需要做客戶端認證,只需要做伺服器認證;
• 完整性(客戶端和伺服器的資料不會被修改),因為整個傳輸過程是加密的;
• 加密(客戶端和伺服器的對話是私密的,無需擔心被竊聽),使用wireshake監聽HTTPS埠會捕獲不到資料。
• 效率(一個執行的足夠快的演算法,以便低端的客戶端和伺服器使用),如果使用HTTP+特別複雜的資料加密技術來試圖替代HTTPS,互動的雙方在加解密的過程會消耗大量的效能,效能下降特別明顯。
• 普適性(基本上所有的客戶端和伺服器都支援這些協議)。
• 管理的可擴充套件性(在任何地方的任何人都可以立即進行安全通訊)。
• 適應性(能夠支援當前最知名的安全方法)。
• 在社會上的可行性(滿足社會的政治文化需要)。
三 、HTTPS的互動過程
1、歷程一:利用非對稱加密傳輸資料, HTTP + 非對稱加密技術
採用HTTP協議,利用非對稱加密RSA技術對資料進行加密(RSA 演算法自身,甚至RSA 實現的原始碼,破解程式碼找到相應的私有金鑰的難度仍相當於對一個極大的數進行質因數分解的困難程度,這種計算被認為是所有電腦科學中最難的問題之一)
只要伺服器端儲存好私鑰,這樣看來資料的傳輸鐵定是沒問題的,但是這還有一個很大的風險,如果黑客假冒自己是伺服器端,把客戶端的公鑰替換成跟黑客伺服器匹配的一對公鑰,客戶端會在不知情的情況下,與黑客伺服器進行互動。
2、歷程二:簽名證書 + SSL 加密,驗證伺服器身份,加密傳輸通道,所有的通訊資料在應用層下加密傳輸,保證傳輸層安全。HTTPS
互動過程如上圖所示,詳細的描述了在簡歷TCP請求後,SSL握手的過程,整個HTTPS的互動過程大致如下:
第一步:1-3 伺服器端生成一個證書請求,伺服器向權威的CA機構申請證書,一般是把公鑰給CA進行加密生成帶CA簽名的證書。
第二步:4 如果CA是權威的機構,一般情況下瀏覽器會報錯CA的根證書,如果是自籤,則需要客戶端主動載入或者選擇信任伺服器發來的證書。
第三步:5 建立底層socket服務,完成TCP的三次握手。
第四步:6 建立傳輸層的SSL握手,具體又可描述為:
A : 6.0-6.1 客戶端發起clent hello 請求:將自己支援的一套加密規則、以及一個隨機數(Random_C)傳送給伺服器。
B : 6.2-6.3 伺服器響應server hello :伺服器根據自己支援的加密規則,從客戶端發來的請求中選出一組加密演算法與HASH演算法,生成隨機數(Random_S),並將自己的身份資訊以證書(CA)的形式發回給瀏覽器。
C: 6.4-6.5 客戶端接到伺服器的初步響應後做四件事情,然後把資料傳送給伺服器端:
(1)證書校驗: 驗證證書的合法性(頒發證書的機構是否合法,證書中包含的網站地址是否與正在訪問的地址一致等)。
(2)生成密碼:瀏覽器會生成一串隨機數的密碼(Pre_master),並用CA證書裡的公鑰加密(enc_pre_master),用於傳給伺服器。
(3)計算協商金鑰:
此時客戶端已經獲取全部的計算協商金鑰需要的資訊:兩個明文隨機數 Random_C 和 Random_S 與自己計算產生的 Pre-master,計算得到協商金鑰enc_key。enc_key=Fuc(random_C, random_S, Pre-Master) (4)生成握手資訊:使用約定好的HASH計算握手訊息,並使用協商金鑰enc_key及約定好的演算法對訊息進行加密。
D: 6.6-6.7 伺服器端接收到客戶端發來的SSL握手資訊後,做以下3件事:
(1)私鑰解密:使用自己的私鑰從接收到的enc_pre_master中解密取出密碼Pre_master。
(2)計算協商金鑰:此時伺服器已經獲取全部的計算協商金鑰需要的資訊:兩個明文隨機數 Random_C 和 Random_S 與Pre-master,計算得到協商金鑰enc_key。enc_key=Fuc(random_C, random_S, Pre-Master)
(3)解密握手訊息:使用協商金鑰enc_key解密客戶端發來的握手訊息,並驗證HASH是否與客戶端發來的一致。
(4)生成握手訊息使用協商金鑰enc_key及約定好的演算法加密一段握手訊息,傳送給客戶端。
第五步: 7 正常加密通訊
握手成功之後,所有的通訊資料在應用層下都將由之前協商金鑰enc_key及約定好的演算法進行加密解密。
Linux公社的RSS地址 : ofollow,noindex" target="_blank">https://www.linuxidc.com/rssFeed.aspx
本文永久更新連結地址: https://www.linuxidc.com/Linux/2018-11/155253.htm