由于HTTP協議存在著明文傳輸、不能很好的驗證通信方的身份和無法驗證報文的完整性等一些安全方面的確點,才誕生了HTTPS。嚴格來時HTTPS不是一種協議而是HTTP + SSL (TSL)的結合體。
1、RSA與AES簡述
先來學習一下AES和RSA的相關知識。
1.1、對稱加密算法AES
AES全稱:Advanced Encryption Standard----高級加密標準,屬于對稱加密的范疇。該加密算法有一個密鑰,該密鑰可以用來加密,也可以用來解密。Client端與Server端有一個共同的Key, 這個Key是用來加密和解密的。如果報文在傳輸的過程中被竊取了,沒有這個key, 對加密的內容進行破解是非常困難的,當然竊取者如果有key的話,也是可以輕而易舉的解密的。所以在AES中,key是關鍵。。
為了更安全,每次加密的Key都是從一個密碼本中動態生成的,而這個密碼本服務端和客戶端都有同一本,每次傳輸的是一些參數。這些參數在經過一些算法的映射,從密碼本中取出相應的key用來解密。相當于給AES加了一層防盜門,加大了破解的難度。這樣做的好處是每次加密的key都是不同的,但是需要密碼本以及映射算法的支持更加耗時。

1.2、不對稱加密算法RSA
RAS這個名字,就是該算法三位發明者的名字的首字母的組合。RAS是非對稱加密,其在加密和解密的過程中,需要兩個Key,一個公鑰(public key),一個是私鑰(private key)。公鑰負責加密,而私鑰負責解密。公鑰是可以開放出去的,任何人都可以持有公鑰進行加密。而私鑰要重點保護,因為是用來解密的。
加密和解密就可以用不同的鑰匙來處理。對于加密放來說,你盡管可以對報文進行加密,如果沒有私有的話也是不可以對你加密的內容進行解密的。你可以把東西放進去,然后再鎖上盒子。但是如果你沒有鑰匙的話,也是打不開這把鎖的。
如下圖Client內置了一個公鑰,該公鑰與Server端的私鑰是配對的,所以Client端可以使用這個內置的Public key加密,而服務端就可以使用這個private key進行解密。目前最常用的是服務端單向認證機制。

2、第三方公認CA
CA就是第三方公認機構,就像我們在淘寶買商品的時候,支付寶起到監管作用一樣,是我們可以信賴的第三方。比如你自己通過RAS算法生成了一個私鑰和公鑰,在公鑰發送給客戶端的過程中有可能被篡改成其他的公鑰,而客戶端在沒有其他措施的保護下是不知道該公鑰是否就是服務器那邊的私鑰對應的公鑰的,公鑰和私鑰有可能在公鑰分發的過程中被篡改。

所以說頒布一個公正機構來證明是很重要的!在RAS加密中也有一個第三方機構來充當這個角色,負責證明客戶端收到的證書就是你發送的證書,中間沒有被篡改。這個中間認證機構,就是數組證書認證機構, 其頒發的證書也就是我們常說的CA證書(CA , Certificate Authority)。
流程一般來說是這樣的:
第一步:服務端人員使用RSA算法生成兩個密鑰,一個用來加密一個用來解密。將負責加密的那個密鑰公布出去,所以我們稱之為公鑰(Public Key),而用來解密的那個密鑰,不能對外公布,只有服務端持有,所以我們稱之為私鑰(Private Key)。服務端在將Public Key進行分發證書之前需要向CA機構申請給將要分發的公鑰進行數字簽名。(服務器公鑰負責加密,服務器私鑰負責解密)
第二步:生成數字簽名公鑰證書:對于CA機構來說,其也有兩個密鑰,我們暫且稱之為CA私鑰和CA公鑰。CA機構將服務端的Public Key作為輸入參數將其轉換為一個特有的Hash值。然后使用CA私鑰將這個Hash值進行加密處理,并與服務端的Public Key綁定在一起,生成數字簽名證書。其實數字簽名證書的本質就是服務端的公鑰+CA私鑰加密的Hash值。(CA私鑰負責簽名,CA公鑰負責驗證)
第三步:服務器獲取到這個已經含有數字簽名并帶有公鑰的證書,將該證書發送給客戶端。當客戶端收到該公鑰數字證書后,會驗證其有效性。大部分客戶端都會預裝CA機構的公鑰,也就是CA公鑰。客戶端使用CA公鑰對數字證書上的簽名進行驗證,這個驗證的過程就是使用CA公鑰對CA私鑰加密的內容進行解密,將解密后的內容與服務端的Public Key所生成的Hash值進行匹配,如果匹配成功,則說明該證書就是相應的服務端發過來的。否則就是非法證書

下圖是公鑰以及數字簽名的具體內容,當對下方公共密鑰進行驗證時,需要使用內置的CA公鑰將數字簽名進行解密。然后將解密后的內容,與公鑰生成的Hash值進行比較,如果匹配成功,那么該證書就是CA機構頒布的合法證書。

3、HTTPS安全通信機制的建立
接下來就學習一下HTTP+SSL是如何進行數據傳輸的。
3.1、HTTPS簡介
HTTPS不是一個新的通信協議,而是HTTP與SSL(或TSL)的組合。SSL--安全套節層(Secure Socket Layer), TSL(Transport Layer Security 安全傳輸層)是以SSL為原型開發的協議。HTTPS就是在HTTP與TCP層中間添加了一個SSL層。因為HTTPS被HTTP多了這層加密的流程,所以HTTPS的速度要比HTTP緩慢的多。

3.2、HTTPS的通信過程
SSL的加密過程是RSA與AES混合進行的,也就是通過RSA加密方式來交換AES加解密的密鑰,然后使用AES加密的方式來傳輸報文,也就是簡稱的握手。下方是圖解。
第一步:有客戶端發起的第一次握手,此次握手過程的主要目的是從服務端獲取數字簽名證書,服務端在發送數字簽名證書之前要先確認客戶端的SSL版本、加密算法等信息。
第二步:完成第一次握手后,接著進行第二次握手。第二次握手是在客戶端收到證書后發起的,主要目的是將AES加解密使用的Key (Pre-master secret)發送給服務端。當然這個AES_KEY是使用第一次握手獲取的公鑰進行加密的。客戶端收到這個使用公鑰加密后的AES_KEY,使用服務端的私鑰進行解密。這樣客戶端和服務端經過二次握手后都持有了AES加解密的KEY。
第三步:當Client與Server端都持有AES_KEY后,就可以對HTTP報文進行加解密了。
第四步: 最后就是斷開連接了。具體如下圖所示:

4、總結
HTTP是在不斷完善的,HTTPS和加密算法也是在不斷更新的,唯一不變的是我們對計算機知識的學習,聽首歌再來學習吧!