HTTPS的工做原理

目的
算法

http就是咱們平時瀏覽網頁時候使用的一種協議(網站是以http://開頭)。http協議傳輸的數據都是未加密的(明文),一次http協議傳輸隱私信息很是不安全。爲了保證這些隱私數據能加密傳輸,出現了https,下面討論一下https的工做原理:瀏覽器

概述
安全

HTTPS在傳輸數據以前須要客戶端(瀏覽器)與服務端(網站)之間進行一次握手,在握手過程當中將確立雙方加密傳輸數據的密碼信息。服務器

握手過程測試

1:瀏覽器將本身支持的一套加密規則發送給服務器。網站

2:服務器從中選出一組加密算法與HASH算法,並將本身的身份信息以證書的形式返回給瀏覽器。證書裏面包含了網站地址,加密公鑰,以及證書的頒發機構等信息。加密

3:瀏覽器獲取證書後的操做:spa

3.1 驗證證書的合法性(頒發證書的機構是否合法,證書中包含的網站地址是否與正在訪問的地址一致等),若是證書受信任,則瀏覽器欄裏面會顯示一個小鎖頭,不然會給出證書不受信的提示。orm

3.2 字符串

3.2.1 若是證書受信任,或者是用戶接受了不受信的證書,瀏覽器會生成一串"隨機數明文"的密碼。

3.2.2 使用證書中提供的公鑰加密(非對稱加密:RSA),生成"隨機數密文"。

3.3 

3.3.1 使用約定好的HASH計算握手消息(MD5),生成一個"瀏覽器生成驗證字符串"(防止別人篡改消息)。

3.3.2 使用生成的"隨機數明文"對消息進行加密(對稱加密:3DES),生成"消息密文"。

3.3.3 最後將以前生成的全部信息(隨機數密文/消息密文/瀏覽器生成驗證字符串)等發送給服務器。

4:服務器接收瀏覽器發來的數據後的操做:

4.1

4.1.1 使用本身的私鑰將"隨機數密文"解密取出"隨機數明文"(非對稱解密:RSA)。

4.1.2 使用"隨機數明文"解密瀏覽器發來的握手消息,生成"握手信息明文"(對稱解密:3DES)。

4.1.3 使用約定好的HASH計算"握手消息明文",驗證是否與瀏覽器發來的一致。

4.2 

4.2.1 使用約定好的HASH計算握手消息(MD5),生成一個"服務器生成驗證字符串"(防止別人篡改消息)。

4.2.2 使用"隨機數明文"加密一段握手消息,生成"消息密文",發送給瀏覽器(消息密文/服務器生成驗證字符串)。

瀏覽器再次接收後的操做:

5.1

5.1.1 使用"隨機數明文"解密服務器發來的握手消息,生成"握手信息明文"(對稱解密:3DES)。

5.1.2 使用約定好的HASH計算"握手消息明文",驗證是否與服務器發來的一致。

5.1.3 若是與服務端發來的HASH一致,此時握手過程結束,以後全部的通訊數據將由以前"隨機數明文"並利用對稱加密算法(3DES)進行加密。

這裏瀏覽器與網站互相發送加密的握手消息並驗證,目的是爲了保證雙方都得到了一致的密碼(RSA只有在握手時執行一次),而且能夠正常的加密解密數據,爲後續真正數據的傳輸作一次測試。

HTTPS通常使用的加密與HASH算法以下:
非對稱加密算法:RSA,DSA/DSS
對稱加密算法:AES,RC4,3DES
HASH算法:MD5,SHA1,SHA256

總結

非對稱加密算法(RSA)用於在握手過程當中加密生成的密碼(隨機數),對稱加密算法(3DES)用於對真正傳輸的數據進行加密,而HASH算法(MD5)用於驗證數據的完整性。

相關文章
相關標籤/搜索