◆張寶玉
(菏澤家政職業(yè)學(xué)院 山東 274300)
淺析HTTPS協(xié)議的原理及應(yīng)用
◆張寶玉
(菏澤家政職業(yè)學(xué)院 山東 274300)
本文詳細(xì)闡述了Https協(xié)議的工作原理,并結(jié)合實(shí)際應(yīng)用情況,對(duì)Https協(xié)議的應(yīng)用前景進(jìn)行了展望。
HTTPS;網(wǎng)絡(luò)協(xié)議;SSL協(xié)議
2015年3月,百度公司推出全站Https安全加密服務(wù),對(duì)傳統(tǒng)Http通道添加SSL安全套接層,將用戶的搜索請(qǐng)求全部變成加密狀態(tài),旨在為廣大網(wǎng)民提供更加安全、私密的信息服務(wù)。同年10月,阿里巴巴宣布旗下所有電商平臺(tái)實(shí)現(xiàn)全站 Https,京東、亞馬遜也在登錄或交易頁(yè)面啟用了Https。細(xì)心的網(wǎng)友可能會(huì)發(fā)現(xiàn),國(guó)內(nèi)幾大銀行網(wǎng)站域名前綴為“http://”,而進(jìn)行網(wǎng)上銀行交易時(shí)域名前綴自動(dòng)變?yōu)椤癶ttps://”。
從Http到Https,百度投入了數(shù)千臺(tái)服務(wù)器,上億元的成本。不僅僅是資金投入,技術(shù)難度和工作量也相當(dāng)大,從搜索基礎(chǔ)架構(gòu)調(diào)試,到全部域名(主域名和子域名)的修改,再到速度的優(yōu)化,并解決了中間者劫持問(wèn)題,百度公司半年來(lái)投入的程序員、工程師加起來(lái)有上百人,相當(dāng)于把整個(gè)搜索的元素進(jìn)行了Https的改寫。花銷這么大的人力、物力、財(cái)力,還冒著相當(dāng)大的風(fēng)險(xiǎn),百度公司為何這般重視Https?Https到底有什么作用,發(fā)展趨勢(shì)如何?
我們先了解幾個(gè)相關(guān)關(guān)鍵詞的概念和含義:
1.1 HTTP協(xié)議
超文本傳輸協(xié)議(Hypertext transfer protocol),它約定了瀏覽器和萬(wàn)維網(wǎng)服務(wù)器之間通信的規(guī)則,是應(yīng)用最廣泛的網(wǎng)上傳輸數(shù)據(jù)的基礎(chǔ)協(xié)議,目前絕大多數(shù)的網(wǎng)站都采用Http協(xié)議。但是Http采用的是明文傳送,消息完整性檢測(cè)也不充分。這種安全缺陷很容易被利用以獲取網(wǎng)民的信息,如訪問(wèn)記錄、賬號(hào)、密碼等。尤其是當(dāng)前網(wǎng)上交易、網(wǎng)上支付已非常普遍,其安全弊端越來(lái)越突出。
1.2 SSL協(xié)議
SSL(Secure Sockets Layer 安全套接層,其繼任者為TLS)是為網(wǎng)絡(luò)通信提供安全及數(shù)據(jù)完整性的一種安全協(xié)議。用以保障在Internet上數(shù)據(jù)傳輸?shù)陌踩脭?shù)據(jù)加密技術(shù),可確保數(shù)據(jù)在網(wǎng)絡(luò)上傳輸?shù)倪^(guò)程中不會(huì)被截取及竊聽(tīng)。
1.3 HTTPS協(xié)議
安全超文本傳輸協(xié)議(Hypertext Transfer Protocol Secure),是由HTTP + SSL 協(xié)議構(gòu)建的可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議,在Http的基礎(chǔ)上通過(guò)傳輸加密和身份認(rèn)證保證了傳輸過(guò)程中的安全性,比Http 協(xié)議更加安全。最直觀的特征是以https://開(kāi)頭并且地址欄兩端有小鎖樣式的圖標(biāo)。圖1所示為Google chrome、Firefox、IE10在使用Https時(shí)的效果:

圖1 使用Https時(shí)的效果
HTTPS協(xié)議特點(diǎn):
(1)Https 需要到CA 申請(qǐng)證書(shū),一般是收費(fèi)的;
(2)Http 是超文本傳輸協(xié)議,信息是明文傳輸,Https 則是具有安全性的SSL 加密傳輸協(xié)議;
(3)Http 一般使用的端口是80 端口,Https 一般使用443端口。
1.4 SSL證書(shū)
也稱為服務(wù)器SSL證書(shū),是遵守SSL協(xié)議的一種數(shù)字證書(shū),由全球信任的證書(shū)頒發(fā)機(jī)構(gòu)(CA)驗(yàn)證服務(wù)器身份后頒發(fā)。證書(shū)就是一種網(wǎng)絡(luò)上證明持有者身份的文件,同時(shí)證書(shū)中還含有公鑰。通常Windows 部署系統(tǒng)的時(shí)候會(huì)在客戶機(jī)上安裝“根受信任機(jī)構(gòu)列表”,當(dāng)客戶端收到一個(gè)證書(shū)時(shí)會(huì)核對(duì)證書(shū)是否為列表中的機(jī)構(gòu)頒發(fā)的,如果是則信任這個(gè)證書(shū)。
2.1 SSL的位置
SSL協(xié)議位于應(yīng)用層和TCP層之間。應(yīng)用層數(shù)據(jù)不再直接傳遞給傳輸層,而是傳遞給SSL層,SSL層把從應(yīng)用層收到的數(shù)據(jù)進(jìn)行加密,并增加自己的SSL頭。
2.2 SSL的工作原理
SSL協(xié)議由三部分組成:握手協(xié)議,記錄協(xié)議,警報(bào)協(xié)議。(1)握手協(xié)議(Handshake protocol)
握手協(xié)議是客戶端和服務(wù)器端用SSL連接通信時(shí)首先使用的協(xié)議,包括客戶機(jī)與服務(wù)器之間的一系列消息。該協(xié)議允許客戶機(jī)和服務(wù)器相互驗(yàn)證,協(xié)商加密和MAC算法以及保密密鑰。握手協(xié)議是在應(yīng)用程序的數(shù)據(jù)傳輸之前使用的。握手協(xié)議過(guò)程可分為四個(gè)階段,如圖2所示:

圖2 握手協(xié)議過(guò)程
①建立安全能力
這個(gè)階段主要是啟動(dòng)邏輯連接,建立連接的安全功能。客戶端先向服務(wù)器端送出一個(gè)client hello消息,服務(wù)器向客戶機(jī)返回server hello消息,并對(duì)client hello消息中的信息進(jìn)行確認(rèn)。
②服務(wù)器認(rèn)證與密鑰交換
當(dāng)服務(wù)器送出server hello消息后,或客戶端需要驗(yàn)證服務(wù)器的身份時(shí),服務(wù)器將其證書(shū)資料傳送給客戶端。
③客戶機(jī)認(rèn)證與密鑰交換
當(dāng)收到服務(wù)器送出的server done消息后,客戶機(jī)核對(duì)服務(wù)器提供的證書(shū)是否正確,接著再確認(rèn)server done消息中所攜帶的參數(shù)是否能夠接受。如果這些都能滿足的話,客戶機(jī)會(huì)響應(yīng)一個(gè)或多個(gè)消息給服務(wù)器。
④完成
客戶機(jī)送出change cipher spec消息,將密碼套件狀態(tài)更新為將要使用的密碼套件狀態(tài)。緊接著,客戶機(jī)利用之前與服務(wù)器協(xié)議得到的算法、密鑰,來(lái)傳送最后的finished消息,用來(lái)證明密鑰交換以及認(rèn)證的過(guò)程已經(jīng)完成。為了響應(yīng)這兩個(gè)消息,服務(wù)器會(huì)傳送自己的change cipher spec消息,并將密碼套件狀態(tài)更新為將要使用密碼套件狀態(tài),最后再送出finished消息。當(dāng)這些步驟完成后,客戶端與服務(wù)器就能開(kāi)始傳送應(yīng)用層的數(shù)據(jù)了。
(2)記錄協(xié)議(Record protocol)
當(dāng)客戶機(jī)和服務(wù)器鑒別對(duì)方并確定安全信息交換使用的算法后,進(jìn)入SSL記錄協(xié)議,記錄協(xié)議提供兩個(gè)服務(wù):
①數(shù)據(jù)保密性:使用握手協(xié)議定義的秘密密鑰對(duì)SSL所傳送的數(shù)據(jù)加密。
②消息完整性:使用握手協(xié)議定義的帶有MAC的密鑰計(jì)算出消息認(rèn)證碼。
SSL記錄協(xié)議操作流程如圖3所示:

圖3 SSL記錄協(xié)議操作流程
記錄協(xié)議接收到應(yīng)用程序傳送的消息,將數(shù)據(jù)分片(切成容易管理的小區(qū)塊),然后選擇是否對(duì)這些區(qū)塊作壓縮,再加上此區(qū)塊的消息認(rèn)證碼。接著將數(shù)據(jù)區(qū)塊與MAC一起做加密處理,加上SSL記錄頭后通過(guò)TCP傳送出去。接收數(shù)據(jù)的那一方對(duì)數(shù)據(jù)進(jìn)行解釋、核查、解壓縮、重組,將消息的內(nèi)容還原,傳送給上層使用者。
(3)警報(bào)協(xié)議(Alert protocol)
當(dāng)客戶機(jī)和服務(wù)器發(fā)現(xiàn)錯(cuò)誤時(shí),會(huì)向?qū)Ψ桨l(fā)送一個(gè)警報(bào)消息。如果是致命錯(cuò)誤,算法立即終止會(huì)話并關(guān)閉SSL連接,同時(shí)還會(huì)刪除相關(guān)的會(huì)話記錄、秘密和密鑰。
總之,在SSL工作過(guò)程中,使用握手協(xié)議協(xié)商加密和MAC算法以及保密密鑰,使用記錄協(xié)議對(duì)交換的數(shù)據(jù)進(jìn)行加密和簽名,使用警報(bào)協(xié)議解決出現(xiàn)的問(wèn)題。
3.1 SSL證書(shū)的作用
(1)認(rèn)證服務(wù)器。網(wǎng)站部署全球信任的SSL證書(shū)后,瀏覽器內(nèi)置安全機(jī)制,實(shí)時(shí)查驗(yàn)證書(shū)狀態(tài),通過(guò)瀏覽器向用戶展示網(wǎng)站認(rèn)證信息,讓用戶輕松識(shí)別網(wǎng)站真實(shí)身份,防止釣魚(yú)網(wǎng)站仿冒。
(2)實(shí)現(xiàn)加密傳輸。安裝SSL證書(shū)后,使用Https加密協(xié)議訪問(wèn)網(wǎng)站,可激活客戶端瀏覽器到網(wǎng)站服務(wù)器之間的"SSL加密通道"(SSL協(xié)議),實(shí)現(xiàn)高強(qiáng)度雙向加密傳輸,防止傳輸數(shù)據(jù)被泄露或篡改。
3.2 SSL證書(shū)的頒發(fā)和驗(yàn)證過(guò)程
Ssl證書(shū)頒發(fā)和驗(yàn)證過(guò)程如圖4所示:

圖4 證書(shū)頒發(fā)和驗(yàn)證過(guò)程
瀏覽器會(huì)從如下三個(gè)方面驗(yàn)證證書(shū)的有效性,不滿足情況下會(huì)報(bào)警提示:
(1)證書(shū)頒發(fā)者是否在“根受信任的證書(shū)頒發(fā)機(jī)構(gòu)列表”中;(2)證書(shū)是否過(guò)期;
(3)證書(shū)的持有者是否和訪問(wèn)的網(wǎng)站一致。
除此之外瀏覽器還會(huì)定期更新證書(shū)頒發(fā)者的“證書(shū)吊銷列表”,如果某個(gè)證書(shū)雖然符合上述條件,但是被它的頒發(fā)者在“證書(shū)吊銷列表”中列出,那么也將給出警告。
4.1 HTTPS 協(xié)議的工作流程
HTTPS在真正的數(shù)據(jù)交互之前通過(guò) SSL握手協(xié)議協(xié)商一個(gè)對(duì)稱密鑰,通過(guò)這個(gè)對(duì)稱密鑰對(duì)以后的通信數(shù)據(jù)進(jìn)行加密。其通信過(guò)程如圖5 所示:

圖5 HTTPS 協(xié)議的工作流程
(1)客戶端發(fā)起HTTPS請(qǐng)求
用戶在瀏覽器里輸入Https網(wǎng)址,然后連接到server的443端口。
(2)服務(wù)端的配置
采用HTTPS協(xié)議的服務(wù)器必須要有一套數(shù)字證書(shū),可以自己制作,也可以向組織申請(qǐng)。兩者的區(qū)別就是自己頒發(fā)的證書(shū)需要通過(guò)客戶端驗(yàn)證后才可以繼續(xù)訪問(wèn),而使用受信任的公司申請(qǐng)的證書(shū)則不會(huì)彈出提示頁(yè)面。數(shù)字證書(shū)其實(shí)就是一對(duì)公鑰和私鑰,就好比一個(gè)鎖和一把鑰匙,并且只有你自己有這把鑰匙,把鎖交給別人,別人把重要的東西鎖起后發(fā)給你,因?yàn)橹挥心阌羞@把鑰匙,所以也只有你才能看到被這把鎖鎖起來(lái)的東西。
(3)傳送證書(shū)
這個(gè)證書(shū)就是公鑰。
(4)客戶端解析證書(shū)
SSL首先驗(yàn)證收到的公鑰是否有效,比如頒發(fā)機(jī)構(gòu)、過(guò)期時(shí)間等,如果發(fā)現(xiàn)異常,彈出警告框,提示證書(shū)存在問(wèn)題,不然,就生成一個(gè)隨即值,接著用證書(shū)對(duì)該隨機(jī)值進(jìn)行加密。正如前面講的,把隨機(jī)值用鎖頭鎖起來(lái),這樣除非有鑰匙,鎖住的內(nèi)容是不會(huì)被看到的。
(5)傳送加密信息
這部分傳送的是用證書(shū)加密后的隨機(jī)值,目的就是讓服務(wù)端得到這個(gè)隨機(jī)值,以后客戶端和服務(wù)端的通信就可以通過(guò)這個(gè)隨機(jī)值來(lái)進(jìn)行加密解密了。
(6)服務(wù)段解密信息
服務(wù)端用私鑰解密后,得到了客戶端傳過(guò)來(lái)的隨機(jī)值(第二個(gè)私鑰),然后把數(shù)據(jù)內(nèi)容通過(guò)該值進(jìn)行對(duì)稱加密。所謂對(duì)稱加密就是,將信息和私鑰通過(guò)某種算法混合在一起,這樣除非知道私鑰,不然無(wú)法獲取內(nèi)容,而正好客戶端和服務(wù)端都知道這個(gè)私鑰,所以只要加密算法夠彪悍,私鑰夠復(fù)雜,數(shù)據(jù)就夠安全。
(7)傳輸加密后的信息
這部分信息是服務(wù)器端用私鑰(第二個(gè)私鑰)加密后的信息,可以在客戶端被還原
(8)客戶端解密信息
客戶端用前面生成的私鑰(第二個(gè)私鑰)解密從服務(wù)器端傳送過(guò)來(lái)的信息,于是獲取了解密后的內(nèi)容。整個(gè)過(guò)程第三方即使監(jiān)聽(tīng)到了數(shù)據(jù),也束手無(wú)策。
4.2 HTTPS 協(xié)議的加密方法
加密算法分為兩種:對(duì)稱加密和非對(duì)稱加密。所謂對(duì)稱加密(也叫密鑰加密)就是指加密和解密使用的是相同的密鑰。而非對(duì)稱加密(也叫公鑰加密)就是指加密和解密使用了不同的密鑰。
對(duì)稱內(nèi)容加密強(qiáng)度非常高,一般不會(huì)被破解。但是要安全地生成和保管密鑰卻是個(gè)很大的問(wèn)題,如果客戶端和服務(wù)器的會(huì)話都使用固定的密鑰來(lái)加密和解密,而對(duì)稱密鑰又被其它人獲取,整個(gè)數(shù)據(jù)交換就不安全了。
非對(duì)稱加密主要用于密鑰交換(也叫密鑰協(xié)商),能夠很好地解決這個(gè)問(wèn)題。瀏覽器和服務(wù)器每次新建會(huì)話時(shí)都使用非對(duì)稱密鑰交換算法協(xié)商出對(duì)稱密鑰,使用這些對(duì)稱密鑰完成應(yīng)用數(shù)據(jù)的加解密和驗(yàn)證,密鑰只在內(nèi)存中生成和保存,并且每次會(huì)話的對(duì)稱密鑰都不相同(除非會(huì)話重復(fù)使用),中間者是無(wú)法竊取的。
既然HTTPS 協(xié)議這么安全,為什么沒(méi)有更早地在互聯(lián)網(wǎng)上全面普及呢?原因如下幾點(diǎn):
5.1 Https 與Http通信過(guò)程的差異
(1)302 重定向,如果用戶沒(méi)有在地址欄中直接輸入前綴Https://進(jìn)行訪問(wèn),就會(huì)出現(xiàn)重定向過(guò)程;
(2)SSL 握手過(guò)程增加了網(wǎng)絡(luò)傳輸RTT和數(shù)字簽名校驗(yàn),很多移動(dòng)終端本身計(jì)算性能就不是很強(qiáng),耗時(shí)會(huì)更加明顯;
(3)證書(shū)驗(yàn)證和狀態(tài)檢驗(yàn)。瀏覽器一般會(huì)通過(guò)OCSP來(lái)檢查證書(shū)的撤銷狀態(tài),在拿到服務(wù)器發(fā)送過(guò)來(lái)的證書(shū)之后會(huì)請(qǐng)求OCSP站點(diǎn)獲取證書(shū)的狀態(tài),如果OCSP站點(diǎn)位于國(guó)外或者出現(xiàn)故障的話會(huì)影響這個(gè)正常用戶的訪問(wèn)速度。
5.2 HTTPS對(duì)訪問(wèn)速度有影響
HTTPS協(xié)議交互增加了網(wǎng)絡(luò)RTT(round trip time)。協(xié)議握手階段比較費(fèi)時(shí)間,對(duì)網(wǎng)站的反應(yīng)速度會(huì)產(chǎn)生負(fù)面的影響。同時(shí),HTTPS加密/解密也會(huì)產(chǎn)生計(jì)算耗時(shí)。要解決速度問(wèn)題,通常會(huì)使用SSL加速器(專用服務(wù)器)來(lái)改善,需要增加硬件設(shè)備以分擔(dān)負(fù)載提高速度。
5.3 SSL 證書(shū)需要交費(fèi)
在HTTPS協(xié)議中,證書(shū)是必須的,使用證書(shū)必須向認(rèn)證機(jī)構(gòu)(CA)購(gòu)買,功能越強(qiáng)大的證書(shū)費(fèi)用會(huì)越高,因此,很多安全性要求不高的網(wǎng)站不愿多此費(fèi)用支出。節(jié)約購(gòu)買和維護(hù)證書(shū)的開(kāi)銷也是原因之一。
5.4 HTTPS服務(wù)器端的負(fù)載增加
與明文通信相比,加密通信要消耗更多的CPU和內(nèi)存資源,如果每次通信都加密,會(huì)消耗相當(dāng)多的資源,訪問(wèn)量較多的網(wǎng)站需要增加投入更大的成本。因此,有些網(wǎng)站只是在傳輸包含敏感信息或保密數(shù)據(jù)時(shí),才利用HTTPS加密通信,并非對(duì)所有內(nèi)容都進(jìn)行加密處理。
國(guó)外的大型互聯(lián)網(wǎng)公司很多已經(jīng)啟用了全站 HTTPS,這也是未來(lái)互聯(lián)網(wǎng)發(fā)展的趨勢(shì)。國(guó)內(nèi)的大型互聯(lián)網(wǎng)企業(yè)大多是在一些涉及賬戶或者交易的子頁(yè)面 / 子請(qǐng)求上啟用了 HTTPS。百度和阿里巴巴率先全站部署 HTTPS,對(duì)國(guó)內(nèi)互聯(lián)網(wǎng)行業(yè)的全站HTTPS 進(jìn)程必將有著巨大示范引領(lǐng)推動(dòng)作用,隨著HTTPS的不斷的推廣和普及,帶給我們的將是一個(gè)更加安全的網(wǎng)絡(luò)環(huán)境。
[1]黃河.編著.計(jì)算機(jī)網(wǎng)絡(luò)安全——協(xié)議、技術(shù)與應(yīng)用[M].清華大學(xué)出版社,2008.
[2]熊平.主編.信息安全原理及應(yīng)用[M].清華大學(xué)出版社,2009.