HTTPS
HTTPS 是最流行的 HTTP 安全形式,由網(wǎng)景公司首創(chuàng)搭盾,所有主要的瀏覽器和服務(wù)器都支持此協(xié)議五辽。 使用 HTTPS 時(shí),所有的 HTTP 請(qǐng)求和響應(yīng)數(shù)據(jù)在發(fā)送之前蹋岩,都要進(jìn)行加密赖草。加密可以使用 SSL 或 TLS。
SSL/TLS 協(xié)議作用在 HTTP 協(xié)議之下剪个,對(duì)于上層應(yīng)用來說秧骑,原來的發(fā)送/接收數(shù)據(jù)流程不變,這就很好地兼容了老的 HTTP 協(xié)議扣囊。由于 SSL/TLS 差別不大乎折,下面統(tǒng)一使用 SSL。
要想了解 HTTPS 為何安全侵歇,還得繼續(xù)了解一下這些概念:加密算法骂澄、摘要算法、數(shù)字簽名和數(shù)字證書惕虑。
加密算法
對(duì)稱密鑰密碼體制
對(duì)稱密鑰密碼體制坟冲,即加密密鑰和解密密鑰是使用相同的密碼體制。對(duì)稱密鑰加密技術(shù)的缺點(diǎn)之一就是發(fā)送者和接收者在對(duì)話之前溃蔫,一定要有一個(gè)共享的密鑰健提,所以不太安全。
公鑰密碼體制
公鑰密碼體制使用不同的加密密鑰與解密密鑰伟叛。公鑰密碼體制產(chǎn)生的主要原因有兩個(gè):一是對(duì)稱密鑰密碼體制的密鑰分配問題私痹,二是對(duì)數(shù)字簽名的需求。
在公鑰密碼體制中统刮,加密密鑰是公開的紊遵,解密密鑰是需要保密的,加密算法和解密算法也是公開的侥蒙。
公鑰密碼體制的加密和解密有如下特點(diǎn):
- 密鑰對(duì)產(chǎn)生器產(chǎn)生出接收者 B 的一對(duì)密鑰暗膜,即加密密鑰 PK 和解密密鑰 SK。
-
發(fā)送者 A 用 B 的公鑰 PK 作為加密密鑰來加密信息辉哥,B 接收后用解密密鑰 SK 解密桦山。
公鑰密碼體制
使用對(duì)稱密鑰時(shí)攒射,由于雙方使用同樣的密鑰,因此在通信信道上可以進(jìn)行一對(duì)一的雙向保密通信恒水,雙方都可以用同一個(gè)密鑰加密解密会放。
使用公開密鑰時(shí),在通信信道上可以是多對(duì)一的單向保密信道钉凌。即可以有多人持有 B 的公鑰咧最,但只有 B 才能解密。
摘要算法
摘要算法的主要特征是加密過程不需要密鑰御雕,并且經(jīng)過加密的數(shù)據(jù)無法被解密矢沿,目前可以被解密逆向的只有CRC32算法,只有輸入相同的明文數(shù)據(jù)經(jīng)過相同的消息摘要算法才能得到相同的密文酸纲。
數(shù)字簽名
用加密系統(tǒng)對(duì)報(bào)文進(jìn)行簽名捣鲸,以說明是誰編寫的報(bào)文,同時(shí)證明報(bào)文未被篡改過闽坡,這種技術(shù)稱為數(shù)字簽名栽惶。
數(shù)字簽名是附加在報(bào)文上的特殊加密校驗(yàn)碼。使用數(shù)字簽名的好處有:
- 簽名可以證明是作者編寫了這條報(bào)文疾嗅。只有作者才會(huì)有最機(jī)密的私有密鑰外厂,因此,只有作者才能計(jì)算出這些校驗(yàn)和代承。
-
簽名可以防止報(bào)文被篡改汁蝶,如果有人在報(bào)文傳輸過程中對(duì)其進(jìn)行了修改,校驗(yàn)和就不再匹配了论悴。
數(shù)字簽名通常是用非對(duì)稱公開密鑰技術(shù)產(chǎn)生的掖棉。
數(shù)字簽名
看上圖,任何人都能用 A 的公鑰 PK 對(duì)密文進(jìn)行 E 運(yùn)算后得到 A 發(fā)送的明文意荤“∑可見這種通信并非為了保密,而是為了進(jìn)行簽名和核實(shí)簽名玖像,即確認(rèn)此信息是 A 發(fā)送的。 但上述過程僅對(duì)報(bào)文進(jìn)行了簽名齐饮,對(duì)報(bào)文 X 本身卻未保密捐寥,所以要采用下圖的方法,同時(shí)實(shí)現(xiàn)秘密通信和數(shù)字簽名祖驱。
加密的數(shù)字簽名
數(shù)字證書
假如你想訪問一個(gè)網(wǎng)站握恳,怎么確保對(duì)方給你的公鑰是你想訪問的網(wǎng)站的公鑰,而不是被中間人篡改過的捺僻?
數(shù)字證書的出現(xiàn)就是為了解決這個(gè)問題乡洼,它是由數(shù)字證書認(rèn)證機(jī)構(gòu)頒發(fā)的崇裁,用來證明公鑰擁有者的身份。換句話說束昵,數(shù)字證書的作用就相當(dāng)于人的身份證拔稳,身份證證明了張三就是張三,而不是別人锹雏。
數(shù)字證書一般包含以下內(nèi)容:
- 對(duì)象的名稱(人巴比、服務(wù)器禁漓、組織等)阵翎;
- 過期時(shí)間;
- 證書發(fā)布者(由誰為證書擔(dān)保)窿春;
- 來自證書發(fā)布者的數(shù)字簽名佣耐;
- 對(duì)象的公鑰政勃;
- 對(duì)象和所用簽名算法的描述性信息。
任何人都可以創(chuàng)建一個(gè)數(shù)字證書兼砖,但由誰來擔(dān)保才是重點(diǎn)奸远。
數(shù)字證書的數(shù)字簽名計(jì)算過程: - 用摘要算法對(duì)數(shù)字證書的內(nèi)容計(jì)算出摘要;
-
用數(shù)字證書的私鑰對(duì)摘要進(jìn)行加密得到數(shù)字簽名掖鱼。
數(shù)字秘鑰格式
瀏覽器收到證書時(shí)然走,會(huì)對(duì)簽名頒發(fā)機(jī)構(gòu)進(jìn)行驗(yàn)證,如果頒發(fā)機(jī)構(gòu)是個(gè)很有權(quán)威的公共簽名機(jī)構(gòu)戏挡,瀏覽器可能就知道其公開密鑰了(瀏覽器會(huì)預(yù)裝很多簽名頒發(fā)機(jī)構(gòu)的證書)芍瑞。如果對(duì)簽名頒發(fā)機(jī)構(gòu)一無所知,瀏覽器通常會(huì)向用戶顯示一個(gè)對(duì)話框褐墅,看看他是否相信這個(gè)簽名發(fā)布者拆檬。
因?yàn)閿?shù)字證書的公鑰是公開的,任何人都可以用公鑰解密出數(shù)字證書的數(shù)字簽名的摘要妥凳,然后再用同樣的摘要算法對(duì)證書內(nèi)容進(jìn)行摘要計(jì)算竟贯,將得出的摘要和解密后的摘要作對(duì)比,如果內(nèi)容一致則說明這個(gè)證書沒有被篡改過逝钥,可以信任屑那。
這個(gè)過程是建立在被大家所認(rèn)可的證書機(jī)構(gòu)之上得到的公鑰,所以這是一種安全的方式艘款。
簽名驗(yàn)證
HTTPS 連接建立過程
HTTPS 連接建立過程和 HTTP 差不多持际,區(qū)別在于 HTTP(默認(rèn)端口 80) 請(qǐng)求只要在 TCP 連接建立后就可以發(fā)起,而 HTTPS(默認(rèn)端口 443) 在 TCP 連接建立后哗咆,還需要經(jīng)歷 SSL 協(xié)議握手蜘欲,成功后才能發(fā)起請(qǐng)求。