HTTPS 原理及安全加密方案
一肺樟、什么是HTTPS
在說HTTPS之前先說說什么是HTTP,HTTP就是我們平時(shí)瀏覽網(wǎng)頁時(shí)候使用的一種協(xié)議哥攘。HTTP協(xié)議傳輸?shù)臄?shù)據(jù)都是未加密的,也就是明文的,因此使用HTTP協(xié)議傳輸隱私信息非常不安全椎眯。為了保證這些隱私數(shù)據(jù)能加密傳輸,于是網(wǎng)景公司設(shè)計(jì)了SSL(Secure Sockets
Layer)協(xié)議用于對HTTP協(xié)議傳輸?shù)臄?shù)據(jù)進(jìn)行加密胳岂,從而就誕生了HTTPS编整。SSL目前的版本是3.0,被IETF(Internet Engineering Task Force)定義在RFC 6101中乳丰,之后IETF對SSL 3.0進(jìn)行了升級掌测,于是出現(xiàn)了TLS(Transport Layer
Security) 1.0,定義在RFC 2246产园。實(shí)際上我們現(xiàn)在的HTTPS都是用的TLS協(xié)議汞斧,但是由于SSL出現(xiàn)的時(shí)間比較早,并且依舊被現(xiàn)在瀏覽器所支持什燕,因此SSL依然是HTTPS的代名詞粘勒,但無論是TLS還是SSL都是上個(gè)世紀(jì)的事情,SSL最后一個(gè)版本是3.0屎即,今后TLS將會繼承SSL優(yōu)良血統(tǒng)繼續(xù)為我們進(jìn)行加密服務(wù)仲义。目前TLS的版本是1.2,定義在RFC 5246中,暫時(shí)還沒有被廣泛的使用埃撵。
對歷史感興趣的朋友可以參考http://en.wikipedia.org/wiki/Transport_Layer_Security赵颅,這里有對TLS/SSL詳盡的敘述。
二暂刘、HTTPS到底安全嗎饺谬?
這個(gè)答案是肯定的,很安全谣拣。谷歌公司已經(jīng)行動起來要大力推廣HTTPS的使用募寨,在未來幾周,谷歌將對全球所有本地域名都啟用HTTPS森缠,用戶只要在搜索前用Google帳號登錄拔鹰,之后所有的搜索操作都將使用TLS協(xié)議加密,見:http://thenextweb.com/google/2012/03/05/google-calls-for-a-more-secure-web-expands-ssl-encryption-to-local-domains/贵涵。
三列肢、HTTPS的工作原理
HTTPS在傳輸數(shù)據(jù)之前需要客戶端(瀏覽器)與服務(wù)端(網(wǎng)站)之間進(jìn)行一次握手,在握手過程中將確立雙方加密傳輸數(shù)據(jù)的密碼信息宾茂。TLS/SSL協(xié)議不僅僅是一套加密傳輸?shù)膮f(xié)議瓷马,更是一件經(jīng)過藝術(shù)家精心設(shè)計(jì)的藝術(shù)品,TLS/SSL中使用了非對稱加密跨晴,對稱加密以及HASH算法欧聘。握手過程的簡單描述如下:此處游覽器可以理解為我們android的客戶端
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)站地址是否與正在訪問的地址一致等)访敌,如果證書受信任凉敲,則瀏覽器欄里面會顯示一個(gè)小鎖頭衣盾,否則會給出證書不受信的提示寺旺。
b)
如果證書受信任,或者是用戶接受了不受信的證書势决,瀏覽器會生成一串隨機(jī)數(shù)的密碼阻塑,并用證書中提供的公鑰加密。
c)
使用約定好的HASH計(jì)算握手消息果复,并使用生成的隨機(jī)數(shù)對消息進(jìn)行加密陈莽,最后將之前生成的所有信息發(fā)送給網(wǎng)站。
4.網(wǎng)站接收瀏覽器發(fā)來的數(shù)據(jù)之后要做以下的操作:
a)
使用自己的私鑰將信息解密取出密碼,使用密碼解密瀏覽器發(fā)來的握手消息走搁,并驗(yàn)證HASH是否與瀏覽器發(fā)來的一致独柑。
b)
使用密碼加密一段握手消息,發(fā)送給瀏覽器私植。
5.瀏覽器解密并計(jì)算握手消息的HASH忌栅,如果與服務(wù)端發(fā)來的HASH一致,此時(shí)握手過程結(jié)束曲稼,之后所有的通信數(shù)據(jù)將由之前瀏覽器生成的隨機(jī)密碼并利用對稱加密算法進(jìn)行加密索绪。
這里瀏覽器與網(wǎng)站互相發(fā)送加密的握手消息并驗(yàn)證,目的是為了保證雙方都獲得了一致的密碼贫悄,并且可以正常的加密解密數(shù)據(jù)瑞驱,為后續(xù)真正數(shù)據(jù)的傳輸做一次測試。另外窄坦,HTTPS一般使用的加密與HASH算法如下:
非對稱加密算法:RSA唤反,DSA/DSS
對稱加密算法:AES,RC4嫡丙,3DES
HASH算法:MD5拴袭,SHA1,SHA256
其中非對稱加密算法用于在握手過程中加密生成的密碼曙博,對稱加密算法用于對真正傳輸?shù)臄?shù)據(jù)進(jìn)行加密拥刻,而HASH算法用于驗(yàn)證數(shù)據(jù)的完整性。由于瀏覽器生成的密碼是整個(gè)數(shù)據(jù)加密的關(guān)鍵父泳,因此在傳輸?shù)臅r(shí)候使用了非對稱加密算法對其加密般哼。非對稱加密算法會生成公鑰和私鑰,公鑰只能用于加密數(shù)據(jù)惠窄,因此可以隨意傳輸蒸眠,而網(wǎng)站的私鑰用于對數(shù)據(jù)進(jìn)行解密,所以網(wǎng)站都會非常小心的保管自己的私鑰杆融,防止泄漏楞卡。
TLS握手過程中如果有任何錯(cuò)誤,都會使加密連接斷開脾歇,從而阻止了隱私信息的傳輸蒋腮。正是由于HTTPS非常的安全,攻擊者無法從中找到下手的地方藕各,于是更多的是采用了假證書的手法來欺騙客戶端池摧,從而獲取明文的信息,但是這些手段都可以被識別出來激况,我將在后續(xù)的文章進(jìn)行講述作彤。
不過2010年還是有安全專家發(fā)現(xiàn)了TLS
1.0協(xié)議處理的一個(gè)漏洞:
http://www.theregister.co.uk/2011/09/19/beast_exploits_paypal_ssl/膘魄,實(shí)際上這種稱為BEAST的攻擊方式早在2002年就已經(jīng)被安全專家發(fā)現(xiàn),只是沒有公開而已竭讳。目前微軟和Google已經(jīng)對此漏洞進(jìn)行了修復(fù)创葡。見:http://support.microsoft.com/kb/2643584/en-us
https://src.chromium.org/viewvc/chrome?view=rev&revision=90643
HTTPS建立連接時(shí)證書的驗(yàn)證流程
2.什么是SSL
Pinning?
可以理解為證書綁定绢慢,是指客戶端直接保存服務(wù)端的證書蹈丸,建立https連接時(shí)直接對比服務(wù)端返回的和客戶端保存的兩個(gè)證書是否一樣,一樣就表明證書是真的呐芥,不再去系統(tǒng)的信任證書機(jī)構(gòu)里尋找驗(yàn)證逻杖。這適用于非瀏覽器應(yīng)用,因?yàn)闉g覽器跟很多未知服務(wù)端打交道思瘟,無法把每個(gè)服務(wù)端的證書都保存到本地荸百,但CS架構(gòu)的像手機(jī)APP事先已經(jīng)知道要進(jìn)行通信的服務(wù)端,可以直接在客戶端保存這個(gè)服務(wù)端的證書用于校驗(yàn)滨攻。
為什么直接對比就能保證證書沒問題够话?如果中間人從客戶端取出證書,再偽裝成服務(wù)端跟其他客戶端通信光绕,它發(fā)送給客戶端的這個(gè)證書不就能通過驗(yàn)證嗎女嘲?確實(shí)可以通過驗(yàn)證,但后續(xù)的流程走不下去诞帐,因?yàn)橄乱徊娇蛻舳藭米C書里的公鑰加密欣尼,中間人沒有這個(gè)證書的私鑰就解不出內(nèi)容,也就截獲不到數(shù)據(jù)停蕉,這個(gè)證書的私鑰只有真正的服務(wù)端有愕鼓,中間人偽造證書主要偽造的是公鑰。
為什么要用SSL
Pinning慧起?正常的驗(yàn)證方式不夠嗎菇晃?如果服務(wù)端的證書是從受信任的的CA機(jī)構(gòu)頒發(fā)的,驗(yàn)證是沒問題的蚓挤,但CA機(jī)構(gòu)頒發(fā)證書比較昂貴磺送,小企業(yè)或個(gè)人用戶可能會選擇自己頒發(fā)證書,這樣就無法通過系統(tǒng)受信任的CA機(jī)構(gòu)列表驗(yàn)證這個(gè)證書的真?zhèn)瘟瞬右猓孕枰猄SL
Pinning這樣的方式去驗(yàn)證