http://blog.chinaunix.net/uid-25518484-id-5701349.html
2016
HTTPS是什么
HTTPS全稱(chēng)為Hypertext Transfer Protocol over Secure Socket Layer,及以安全為目標的HTTP通道,簡(jiǎn)單說(shuō)就是HTTP的安全版本。
HTTPS其實(shí)是由兩部分組成的:HTTP+TLS/SSL,即HTTP下加入TLS/SSL層,HTTPS的安全基礎就是TLS/SSL。服務(wù)端和客戶(hù)端的信息傳輸都會(huì )通過(guò)TLS/SSL進(jìn)行加密,所以傳輸的數據都是加密之后的數據。TLS的前身就是SSL協(xié)議,因此沒(méi)有特別說(shuō)明TLS/SSL說(shuō)的都是同一個(gè)東西。
HTTP在安全方面的缺陷
HTTP本身是明文傳輸的,沒(méi)有經(jīng)過(guò)任何安全處理。例如用戶(hù)在百度搜索了一個(gè)關(guān)鍵字,比如”蘋(píng)果手機”,中間者完全能夠查到到這個(gè)信息,并且有可能打電話(huà)過(guò)來(lái)騷擾用戶(hù)。也有一些用戶(hù)投訴使用百度時(shí),發(fā)現首頁(yè)或者結果頁(yè)浮了一個(gè)很長(cháng)很大的廣告,這也肯定是中間者往頁(yè)面插的廣告內容。如果劫持技術(shù)比較低劣的話(huà),用戶(hù)甚至無(wú)法訪(fǎng)問(wèn)百度。
這里提到的一些中間者主要指一些網(wǎng)絡(luò )節點(diǎn),使用戶(hù)數據在瀏覽器和百度服務(wù)器之間傳輸必須要經(jīng)過(guò)的節點(diǎn),比如WIFI熱點(diǎn)、路由器、防火墻、反向代理、緩存服務(wù)器等。
在HTTP協(xié)議下,中間者可以隨意嗅探用戶(hù)搜索內容,竊取隱私甚至篡改網(wǎng)頁(yè)。不過(guò)HTTPS是這些劫持行為的克星,能夠完全有效地防御??傮w來(lái)說(shuō),HTTPS協(xié)議提供了三個(gè)強大的功能來(lái)對抗上述的劫持行為:
1、內容加密。瀏覽器到百度服務(wù)器的內容都是以加密形式傳輸的,中間者無(wú)法直接查看原始內容
2、身份認證。保證用戶(hù)訪(fǎng)問(wèn)的是百度服務(wù),即使被DNS劫持到了第三方站點(diǎn),也會(huì )提醒用戶(hù)沒(méi)有訪(fǎng)問(wèn)百度服務(wù)
3、數據完整。防止內容被第三方冒充或篡改
HTTPS工作原理
用一張圖表示一下HTTPS的工作原理,來(lái)自http://blog.csdn.net/sean_cd/article/details/6966130,這位網(wǎng)友將基本的HTTPS工作原理已經(jīng)總結得挺好了,我在此文的基礎上再做一些補充:
其工作過(guò)程大致是:
1、客戶(hù)端發(fā)起HTTPS請求
瀏覽器里面輸入一個(gè)HTTPS網(wǎng)址,然后連接到服務(wù)端的443端口上。注意這個(gè)過(guò)程中客戶(hù)端會(huì )發(fā)送一個(gè)密文族給服務(wù)端,密文族是瀏覽器所支持的加密算法的清單。
2、服務(wù)端配置
采用HTTPS協(xié)議的服務(wù)器必須要有一套數字證書(shū),可以自己制作,也可以向組織申請。區別就是自己頒發(fā)的證書(shū)需要客戶(hù)端驗證通過(guò)才可以繼續訪(fǎng)問(wèn),而使用受信任的公司申請的證書(shū)則不會(huì )彈出提示頁(yè)面。
這套證書(shū)其實(shí)就是一對公鑰和私鑰,可以這么理解,公鑰就是一把鎖頭,私鑰就是這把鎖的鑰匙,鎖頭可以給別人對某個(gè)東西進(jìn)行加鎖,但是加鎖完畢之后,只有持有這把鎖的鑰匙才可以解鎖看到加鎖的內容。
前面說(shuō)過(guò)客戶(hù)端會(huì )傳送密文族給服務(wù)端,服務(wù)端則會(huì )從這些密文族中,挑選出一個(gè),比如百度采用的就是RSA公鑰加密算法來(lái)區分證書(shū)簽名和交換密鑰,通過(guò)AES算法來(lái)加密數據,至于GCM,應該是用來(lái)校驗信息的。
3、傳送證書(shū)
這個(gè)證書(shū)其實(shí)就是公鑰,只是包含了很多信息,如證書(shū)的頒發(fā)機構、過(guò)期時(shí)間等等。
4、客戶(hù)端解析證書(shū)
這部分工作是由客戶(hù)端的TLS來(lái)完成的,首先會(huì )驗證公鑰是否有效,如頒發(fā)機構、過(guò)期時(shí)間等等,如果發(fā)現異常則會(huì )彈出一個(gè)警告框,提示證書(shū)存在問(wèn)題。如果證書(shū)沒(méi)有問(wèn)題,那么就生成一個(gè)隨機值,然后用證書(shū)對該隨機值進(jìn)行加密。
注意一下上面提到的”發(fā)現異?!?。證書(shū)中會(huì )包含數字簽名,該數字簽名是加密過(guò)的,是用頒發(fā)機構的私鑰對本證書(shū)的公鑰、名稱(chēng)及其他信息做hash散列加密而生成的??蛻?hù)端瀏覽器會(huì )首先找到該證書(shū)的根證書(shū)頒發(fā)機構,如果有,則用該根證書(shū)的公鑰解密服務(wù)器下發(fā)的證書(shū),如果不能正常解密,則就是”發(fā)現異?!?,說(shuō)明該證書(shū)是偽造的。
5、傳送加密信息
這部分傳送的是用證書(shū)加密后的隨機值,目的就是讓服務(wù)端得到這個(gè)隨機值,然后客戶(hù)端和服務(wù)端的通信就可以通過(guò)這個(gè)隨機值來(lái)進(jìn)行加密和解密了。
6、服務(wù)端解密信息
服務(wù)端用私鑰解密后,得到了客戶(hù)端傳過(guò)來(lái)的隨機值,至此一個(gè)非對稱(chēng)加密的過(guò)程結束,看到TLS利用非對稱(chēng)加密實(shí)現了身份認證和密鑰協(xié)商。然后把內容通過(guò)該值進(jìn)行對稱(chēng)加密。
7、傳輸加密后的信息
這部分是服務(wù)端用隨機值加密后的信息,可以在客戶(hù)端被還原。
8、客戶(hù)端解密信息
客戶(hù)端用之前生成的隨機值解密服務(wù)端傳送過(guò)來(lái)的信息,于是獲取了解密后的內容,至此一個(gè)對稱(chēng)加密的過(guò)程結束,看到對稱(chēng)加密是用于對服務(wù)器待傳送給客戶(hù)端的數據進(jìn)行加密用的。整個(gè)過(guò)程即使第三方監聽(tīng)了數據,也束手無(wú)策。
聯(lián)系客服