加密算法的類(lèi)型基本上分為了兩種:
- 對(duì)稱(chēng)加密,加密用的密鑰和解密用的密鑰是同一個(gè)勾扭,比較有代表性的就是 AES 加密算法蜓萄;
- 非對(duì)稱(chēng)加密好啰,加密用的密鑰稱(chēng)為公鑰,解密用的密鑰稱(chēng)為私鑰旬盯,經(jīng)常使用到的 RSA 加密算法就是非對(duì)稱(chēng)加密的;
此外,還有Hash加密算法
HASH算法:MD5, SHA1, SHA256
相比較對(duì)稱(chēng)加密而言蒲稳,非對(duì)稱(chēng)加密安全性更高,但是加解密耗費(fèi)的時(shí)間更長(zhǎng)伍派,速度慢江耀。
HTTPS = HTTP + SSL,HTTPS 的加密就是在 SSL 中完成的拙已。
這就要從 CA 證書(shū)講起了决记。CA 證書(shū)其實(shí)就是數(shù)字證書(shū),是由 CA 機(jī)構(gòu)頒發(fā)的倍踪。至于 CA 機(jī)構(gòu)的權(quán)威性系宫,那么是毋庸置疑的,所有人都是信任它的建车。CA 證書(shū)內(nèi)一般會(huì)包含以下內(nèi)容:
- 證書(shū)的頒發(fā)機(jī)構(gòu)扩借、版本
- 證書(shū)的使用者
- 證書(shū)的公鑰
- 證書(shū)的有效時(shí)間
- 證書(shū)的數(shù)字簽名 Hash 值和簽名 Hash 算法
- ...
客戶(hù)端如何校驗(yàn) CA 證書(shū)?
CA 證書(shū)中的 Hash 值缤至,其實(shí)是用證書(shū)的私鑰進(jìn)行加密后的值(證書(shū)的私鑰不在 CA 證書(shū)中)潮罪。然后客戶(hù)端得到證書(shū)后,利用證書(shū)中的公鑰去解密該 Hash 值领斥,得到 Hash-a 嫉到;然后再利用證書(shū)內(nèi)的簽名 Hash 算法去生成一個(gè) Hash-b 。最后比較 Hash-a 和 Hash-b 這兩個(gè)的值月洛。如果相等何恶,那么證明了該證書(shū)是對(duì)的,服務(wù)端是可以被信任的嚼黔;如果不相等细层,那么就說(shuō)明該證書(shū)是錯(cuò)誤的,可能被篡改了唬涧,瀏覽器會(huì)給出相關(guān)提示疫赎,無(wú)法建立起 HTTPS 連接。除此之外碎节,還會(huì)校驗(yàn) CA 證書(shū)的有效時(shí)間和域名匹配等捧搞。
HTTPS 中的 SSL 握手建立過(guò)程
假設(shè)現(xiàn)在有客戶(hù)端 A 和服務(wù)器 B :
- 1、首先,客戶(hù)端 A 訪問(wèn)服務(wù)器 B 实牡,比如我們用瀏覽器打開(kāi)一個(gè)網(wǎng)頁(yè) www.baidu.com 陌僵,這時(shí),瀏覽器就是客戶(hù)端 A 创坞,百度的服務(wù)器就是服務(wù)器 B 了碗短。這時(shí)候客戶(hù)端 A 會(huì)生成一個(gè)隨機(jī)數(shù)1,把隨機(jī)數(shù)1 题涨、自己支持的 SSL 版本號(hào)以及加密算法等這些信息告訴服務(wù)器 B 偎谁。
- 2、服務(wù)器 B 知道這些信息后纲堵,然后確認(rèn)一下雙方的加密算法巡雨,然后服務(wù)端也生成一個(gè)隨機(jī)數(shù) B ,并將隨機(jī)數(shù) B 和 CA 頒發(fā)給自己的證書(shū)一同返回給客戶(hù)端 A 席函。
- 3铐望、客戶(hù)端 A 得到 CA 證書(shū)后,會(huì)去校驗(yàn)該 CA 證書(shū)的有效性茂附,校驗(yàn)方法在上面已經(jīng)說(shuō)過(guò)了正蛙。校驗(yàn)通過(guò)后,客戶(hù)端生成一個(gè)隨機(jī)數(shù)3 营曼,然后用證書(shū)中的公鑰加密隨機(jī)數(shù)3 并傳輸給服務(wù)端 B 乒验。
- 4、服務(wù)端 B 得到加密后的隨機(jī)數(shù)3蒂阱,然后利用私鑰進(jìn)行解密锻全,得到真正的隨機(jī)數(shù)3。
- 5录煤、最后鳄厌,客戶(hù)端 A 和服務(wù)端 B 都有隨機(jī)數(shù)1、隨機(jī)數(shù)2妈踊、隨機(jī)數(shù)3部翘,然后雙方利用這三個(gè)隨機(jī)數(shù)生成一個(gè)對(duì)話(huà)密鑰。之后傳輸內(nèi)容就是利用對(duì)話(huà)密鑰來(lái)進(jìn)行加解密了响委。這時(shí)就是利用了對(duì)稱(chēng)加密,一般用的都是 AES 算法窖梁。
- 6赘风、客戶(hù)端 A 通知服務(wù)端 B ,指明后面的通訊用對(duì)話(huà)密鑰來(lái)完成纵刘,同時(shí)通知服務(wù)器 B 客戶(hù)端 A 的握手過(guò)程結(jié)束邀窃。
- 7、服務(wù)端 B 通知客戶(hù)端 A,指明后面的通訊用對(duì)話(huà)密鑰來(lái)完成瞬捕,同時(shí)通知客戶(hù)端 A 服務(wù)器 B 的握手過(guò)程結(jié)束鞍历。
- 8、SSL 的握手部分結(jié)束肪虎,SSL 安全通道的數(shù)據(jù)通訊開(kāi)始劣砍,客戶(hù)端 A 和服務(wù)器 B 開(kāi)始使用相同的對(duì)話(huà)密鑰進(jìn)行數(shù)據(jù)通訊。
簡(jiǎn)化如下:
- 1扇救、客戶(hù)端和服務(wù)端建立 SSL 握手刑枝,客戶(hù)端通過(guò) CA 證書(shū)來(lái)確認(rèn)服務(wù)端的身份;
- 2迅腔、互相傳遞三個(gè)隨機(jī)數(shù)装畅,之后通過(guò)這隨機(jī)數(shù)來(lái)生成一個(gè)密鑰;
- 3沧烈、互相確認(rèn)密鑰掠兄,然后握手結(jié)束;
- 4锌雀、數(shù)據(jù)通訊開(kāi)始蚂夕,都使用同一個(gè)對(duì)話(huà)密鑰來(lái)加解密;
可以發(fā)現(xiàn)汤锨,在 HTTPS 加密原理的過(guò)程中把對(duì)稱(chēng)加密和非對(duì)稱(chēng)加密都利用了起來(lái)双抽。即利用了非對(duì)稱(chēng)加密安全性高的特點(diǎn),又利用了對(duì)稱(chēng)加密速度快闲礼,效率高的好處牍汹。