目的
算法
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 瀏覽器再次接收後的操做:
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)用於驗證數據的完整性。