原文? HTTPS 原理
一朴乖、概念和定義
首先明確幾個(gè)基本概念:
1祖屏、名詞解釋
1.1助赞、密鑰對(duì)
在非對(duì)稱加密技術(shù)中,有兩種密鑰袁勺,分為私鑰和公鑰雹食,私鑰是密鑰對(duì)所有者持有,不可公布期丰,公鑰是密鑰對(duì)持有者公布給他人的群叶。
1.2、公鑰和私鑰
公鑰用來(lái)給數(shù)據(jù)加密钝荡,用公鑰加密的數(shù)據(jù)只能使用私鑰解密街立。私鑰用來(lái)解密公鑰加密的數(shù)據(jù)。
1.3埠通、摘要
摘要就是對(duì)需要傳輸?shù)奈谋臼昀耄鲆粋€(gè)HASH計(jì)算,一般采用SHA1端辱,SHA2來(lái)獲得梁剔。
1.4、簽名
使用私鑰對(duì)需要傳輸?shù)奈谋镜恼M(jìn)行加密舞蔽,得到的密文即被稱為該次傳輸過(guò)程的簽名荣病。
1.5、簽名驗(yàn)證
數(shù)據(jù)接收端渗柿,拿到傳輸文本个盆,但是需要確認(rèn)該文本是否就是發(fā)送發(fā)出的內(nèi)容,中途是否曾經(jīng)被篡改做祝。
因此拿自己持有的公鑰對(duì)簽名進(jìn)行解密(密鑰對(duì)中的 一種密鑰加密的數(shù)據(jù)必定能使用另一種密鑰解密砾省。),得到了文本的摘要混槐,然后使用與發(fā)送方同樣的HASH算法計(jì)算摘要值编兄,再與解密得到的摘要做對(duì)比,發(fā)現(xiàn)二 者完全一致声登,則說(shuō)明文本沒(méi)有被篡改過(guò)狠鸳。
2、理論
在 簽名過(guò)程中悯嗓,收到數(shù)據(jù)的一方需要自己保管好公鑰件舵,但是每一個(gè)發(fā)送方都有一個(gè)公鑰,接收數(shù)據(jù)的人需要保存非常多的公鑰脯厨,這根本就管理不過(guò)來(lái)铅祸。并且本地保存的公鑰有可能被篡改替換,無(wú)從發(fā)現(xiàn)。
怎么解決這一問(wèn)題呢临梗,這時(shí)候就輪到CA登場(chǎng)了N卸蟆!
CA是一個(gè)統(tǒng)一的證書管理機(jī)構(gòu)盟庞,管理所有需要發(fā)送數(shù)據(jù)方的公鑰吃沪,對(duì)公鑰進(jìn) 行認(rèn)證和加密。認(rèn)證加密后的公鑰即是證書什猖,又稱為CA證書票彪,證書中包含了很多信息,最重要的是申請(qǐng)者的公鑰不狮。
CA 機(jī)構(gòu)在給公鑰加密時(shí)降铸,用的是一個(gè)統(tǒng)一的密鑰對(duì),在加密公鑰時(shí)荤傲,用的是其中的私鑰垮耳。
這樣,申請(qǐng)者拿到證書后遂黍,在發(fā)送數(shù)據(jù)時(shí)终佛,用自己的私鑰生成簽名,將簽名雾家、 證書和發(fā)送內(nèi)容一起發(fā)給對(duì)方铃彰,對(duì)方拿到了證書后,需要對(duì)證書解密以獲取到證書中的公鑰芯咧,解密需要用到CA機(jī)構(gòu)的”統(tǒng)一密鑰對(duì)“中的公鑰牙捉,這個(gè)公鑰也就是我 們常說(shuō)的CA根證書。
通常我們到證書頒發(fā)機(jī)構(gòu)去下載并安裝到相應(yīng)的收取數(shù)據(jù)的客戶端敬飒,如:瀏覽器上面邪铲。這個(gè)公鑰只需要安裝一次。有了這個(gè)公鑰之后无拗,就可 以解密證書带到,拿到發(fā)送方的公鑰,然后解密發(fā)送方發(fā)過(guò)來(lái)的簽名英染,獲取摘要揽惹,重新計(jì)算摘要,作對(duì)比四康,以驗(yàn)證數(shù)據(jù)內(nèi)容的完整性搪搏。
HTTPS就是綜合用了加密解密和數(shù)字簽名的實(shí)例,理解了上述概念和過(guò)程闪金,結(jié)合密鑰對(duì)交換的過(guò)程就不難理解HTTPS疯溺。
3、進(jìn)階
HTTPS在傳輸數(shù)據(jù)之前需要客戶端(瀏覽器)與服務(wù)端(網(wǎng)站)之間進(jìn)行一次握手,在握手過(guò)程中將確立雙方加密傳輸數(shù)據(jù)的密碼信息囱嫩。
TLS/SSL協(xié)議不僅僅是一套加密傳輸?shù)膮f(xié)議嗅辣,更是一件經(jīng)過(guò)藝術(shù)家精心設(shè)計(jì)的藝術(shù)品,TLS/SSL中使用了非對(duì)稱加密挠说,對(duì)稱加密以及HASH算法。
握手過(guò)程的簡(jiǎn)單描述如下:
1.瀏覽器將自己支持的一套加密規(guī)則發(fā)送給網(wǎng)站愿题。
2.網(wǎng)站從中選出一組加密算法與HASH算法损俭,并將自己的身份信息以證書的形式發(fā)回給瀏覽器。證書里面包含了網(wǎng)站地址潘酗,加密公鑰杆兵,以及證書的頒發(fā)機(jī)構(gòu)等信息。
3.獲得網(wǎng)站證書之后瀏覽器要做以下工作:
a) 驗(yàn)證證書的合法性(頒發(fā)證書的機(jī)構(gòu)是否合法仔夺,證書中包含的網(wǎng)站地址是否與正在訪問(wèn)的地址一致等)琐脏,如果證書受信任,則瀏覽器欄里面會(huì)顯示一個(gè)小鎖頭缸兔,否則會(huì)給出證書不受信的提示日裙。
b) 如果證書受信任,或者是用戶接受了不受信的證書惰蜜,瀏覽器會(huì)生成一串隨機(jī)數(shù)的密碼昂拂,并用證書中提供的公鑰加密。
c) 使用約定好的HASH計(jì)算握手消息抛猖,并使用生成的隨機(jī)數(shù)對(duì)消息進(jìn)行加密格侯,最后將之前生成的所有信息發(fā)送給網(wǎng)站。
4.網(wǎng)站接收瀏覽器發(fā)來(lái)的數(shù)據(jù)之后要做以下的操作:
a) 使用自己的私鑰將信息解密取出密碼财著,使用密碼解密瀏覽器發(fā)來(lái)的握手消息联四,并驗(yàn)證HASH是否與瀏覽器發(fā)來(lái)的一致。
b) 使用密碼加密一段握手消息撑教,發(fā)送給瀏覽器朝墩。
5.瀏覽器解密并計(jì)算握手消息的HASH,如果與服務(wù)端發(fā)來(lái)的HASH一致驮履,此時(shí)握手過(guò)程結(jié)束鱼辙,之后所有的通信數(shù)據(jù)將由之前瀏覽器生成的隨機(jī)密碼并利用對(duì)稱加密算法進(jìn)行加密。
這里瀏覽器與網(wǎng)站互相發(fā)送加密的握手消息并驗(yàn)證玫镐,目的是為了保證雙方都獲得了一致的密碼倒戏,并且可以正常的加密解密數(shù)據(jù),為后續(xù)真正數(shù)據(jù)的傳輸做一次測(cè)試恐似。另外杜跷,HTTPS一般使用的加密與HASH算法如下:
非對(duì)稱加密算法:RSA,DSA/DSS
對(duì)稱加密算法:AES,RC4葛闷,3DES
HASH算法:MD5憋槐,SHA1,SHA256
其中非對(duì)稱加密算法用于在握手過(guò)程中加密生成的密碼淑趾,對(duì)稱加密算法用于對(duì)真正傳輸?shù)臄?shù)據(jù)進(jìn)行加密阳仔,而HASH算法用于驗(yàn)證數(shù)據(jù)的完整性。
由于瀏覽器生成的密碼是整個(gè)數(shù)據(jù)加密的關(guān)鍵扣泊,因此在傳輸?shù)臅r(shí)候使用了非對(duì)稱加密算法對(duì)其加密近范。
非對(duì)稱加密算法會(huì)生成公鑰和私鑰,公鑰只能用于加密數(shù)據(jù)延蟹,因此可以隨意傳輸评矩,而網(wǎng)站的私鑰用于對(duì)數(shù)據(jù)進(jìn)行解密,所以網(wǎng)站都會(huì)非常小心的保管自己的私鑰阱飘,防止泄漏斥杜。
TLS握手過(guò)程中如果有任何錯(cuò)誤,都會(huì)使加密連接斷開(kāi)沥匈,從而阻止了隱私信息的傳輸蔗喂。
正是由于HTTPS非常的安全,攻擊者無(wú)法從中找到下手的地方咐熙,于是更多的是采用了假證書的手法來(lái)欺騙客戶端弱恒,從而獲取明文的信息,但是這些手段都可以被識(shí)別出來(lái)
4棋恼、SSL返弹、TLS
SSL由從前的網(wǎng)景公司開(kāi)發(fā),有1,2,3三個(gè)版本,但現(xiàn)在只使用版本3
TLS是SSL的標(biāo)準(zhǔn)化后的產(chǎn)物 有1.0 1.1 1.2三個(gè)版本, 目前在用1.0, TLS1.0和SSL3.0幾乎沒(méi)有區(qū)別
事實(shí)上我們現(xiàn)在用的都是TLS爪飘,但因?yàn)闅v史上習(xí)慣了SSL這個(gè)稱呼 平常還是以SSL為多
二义起、HTTPS通訊過(guò)程
HTTPS能夠加密信息,從而避免敏感信息被第三方獲取师崎。很多的銀行網(wǎng)站或電子郵箱等等安全級(jí)別較高的服務(wù)都會(huì)采用HTTPS協(xié)議默终。
HTTPS 由兩部分組成:HTTP +SSL / TLS,就是在HTTP上又加了一層處理加密信息的模塊犁罩。服務(wù)端和客戶端的信息傳輸都會(huì)通過(guò)TLS進(jìn)行加密齐蔽,所以傳輸?shù)臄?shù)據(jù)都是加密后的數(shù)據(jù)。
服務(wù)端的配置
采用HTTPS協(xié)議的服務(wù)器必須要有一套數(shù)字證書床估,可以自己制作含滴,也可以向組織申請(qǐng)。
區(qū)別就是自己頒發(fā)的證書需要客戶端驗(yàn)證通過(guò)丐巫,才可以繼續(xù)訪問(wèn)谈况,而使用受信任的公司申請(qǐng)的證書則不會(huì)彈出提示頁(yè)面(startssl就是個(gè)不錯(cuò)的選擇勺美,有1年的免費(fèi)服務(wù))。
這套證書其實(shí)就是一對(duì)公鑰和私鑰碑韵。
如果對(duì)公鑰和私鑰不太理解赡茸,可以想象成一把鑰匙和一個(gè)鎖頭,只是全世界只有你一個(gè)人有這把鑰匙祝闻,你可以把鎖頭給別人占卧,別人可以用這個(gè)鎖把重要的東西鎖起來(lái),然后發(fā)給你联喘,因?yàn)橹挥心阋粋€(gè)人有這把鑰匙屉栓,所以只有你才能看到被這把鎖鎖起來(lái)的東西。
1. 客戶端發(fā)起HTTPS請(qǐng)求
用戶從瀏覽器輸入https網(wǎng)址耸袜,連接到服務(wù)器的443端口。
2. 服務(wù)端接收請(qǐng)求牲平,給客戶端返回證書
證書其實(shí)就是公鑰堤框,當(dāng)然包含了很多信息,如證書的頒發(fā)機(jī)構(gòu)纵柿,過(guò)期時(shí)間等蜈抓。
3. 客戶端解析證書
客戶端會(huì)驗(yàn)證公鑰是否有效,比如頒發(fā)機(jī)構(gòu)昂儒,過(guò)期時(shí)間等等:
如果發(fā)現(xiàn)異常沟使,則會(huì)彈出一個(gè)警告框,提示證書存在問(wèn)題渊跋。
如果證書沒(méi)有問(wèn)題腊嗡,那么就生成一個(gè)隨機(jī)值。然后用證書對(duì)該隨機(jī)值進(jìn)行加密拾酝。就好像上面說(shuō)的燕少,把隨機(jī)值用鎖頭鎖起來(lái),這樣除非有鑰匙蒿囤,不然看不到被鎖住的內(nèi)容客们。
4. 客戶端向服務(wù)端發(fā)送加密后的隨機(jī)值
客戶端發(fā)送給服務(wù)端用證書加密后的隨機(jī)值,讓服務(wù)端得到這個(gè)隨機(jī)值材诽,之后客戶端和服務(wù)端的通信通過(guò)這個(gè)隨機(jī)值來(lái)進(jìn)行加密解密底挫。
5. 服務(wù)端用私鑰解密收到的加密隨機(jī)值,解出隨機(jī)值
服務(wù)端用私鑰解密得到客戶端傳來(lái)的隨機(jī)值(私鑰)脸侥,然后把內(nèi)容通過(guò)該值進(jìn)行對(duì)稱加密建邓。
所謂對(duì)稱加密就是,將信息和私鑰通過(guò)某種算法混合在一起湿痢,這樣除非知道私鑰涝缝,不然無(wú)法獲取內(nèi)容扑庞,而正好客戶端和服務(wù)端都知道這個(gè)私鑰,所以只要加密算法夠彪悍拒逮,私鑰夠復(fù)雜罐氨,數(shù)據(jù)就夠安全。
6. 服務(wù)端向客戶端發(fā)送加密后的信息
這部分信息是服務(wù)端用私鑰加密后的信息滩援,可以在客戶端被還原栅隐。
7. 客戶端解密信息
客戶端用之前生成的私鑰解密服務(wù)端傳過(guò)來(lái)的信息,于是獲取了解密后的內(nèi)容玩徊。
這個(gè)過(guò)程第三方即使監(jiān)聽(tīng)到了數(shù)據(jù)租悄,也沒(méi)法解密。