謠言粉碎機(jī)前些日子發(fā)布的《用公共 WiFi 上網(wǎng)會(huì)危害銀行賬戶安全嗎?》原叮,文中介紹了在使用 HTTPS 進(jìn)行網(wǎng)絡(luò)加密傳輸?shù)囊恍┣闆r,從回復(fù)來(lái)看巡蘸,爭(zhēng)議還是有的奋隶。隨著網(wǎng)絡(luò)越來(lái)越普及,應(yīng)用越來(lái)越廣泛悦荒,一些網(wǎng)絡(luò)安全問(wèn)題也會(huì)越來(lái)越引起網(wǎng)民的關(guān)注唯欣,在這里和大家一起聊聊 TLS/SSL 也就是我們常說(shuō)的 HTTPS ,從原理到實(shí)際應(yīng)用看清它到底是怎么一回事搬味,以及在使用 HTTPS 要注意哪些問(wèn)題以及相關(guān)的安全技巧境氢。
網(wǎng)絡(luò)安全是一個(gè)整體的事件,涉及到個(gè)人計(jì)算機(jī)的安全碰纬,協(xié)議的安全萍聊,傳輸數(shù)據(jù)的安全,以及軟件開(kāi)發(fā)公司和網(wǎng)站的安全悦析,單純的依靠一個(gè) HTTPS 協(xié)議并不能解決所有的問(wèn)題寿桨。希望通過(guò)今后一點(diǎn)一點(diǎn)的對(duì)安全相關(guān)的問(wèn)題進(jìn)行說(shuō)明解釋,能讓更多人對(duì)網(wǎng)絡(luò)安全有所了解强戴,從而更安全的使用網(wǎng)絡(luò)亭螟。
文章會(huì)比較長(zhǎng),暫時(shí)計(jì)劃分成三個(gè)部分:
第一部分主要描述 HTTPS 的原理骑歹;第二部分主要描述 SSL 證書(shū)驗(yàn)證的過(guò)程與使用的一些注意事項(xiàng)预烙;第三部分會(huì)呈現(xiàn)一些針對(duì) HTTPS 攻擊的實(shí)例。如果有需要道媚,我會(huì)后續(xù)的補(bǔ)充一些內(nèi)容扁掸。
我盡量使用最簡(jiǎn)潔的語(yǔ)言來(lái)描述相關(guān)的概念翘县,這里開(kāi)始先挖個(gè)坑,然后慢慢地填也糊。
一炼蹦、什么是 HTTPS
在說(shuō)HTTPS之前先說(shuō)說(shuō)什么是 HTTP ,HTTP 就是我們平時(shí)瀏覽網(wǎng)頁(yè)時(shí)候使用的一種協(xié)議狸剃。HTTP 協(xié)議傳輸?shù)臄?shù)據(jù)都是未加密的掐隐,也就是明文的,因此使用HTTP協(xié)議傳輸隱私信息非常不安全钞馁。為了保證這些隱私數(shù)據(jù)能加密傳輸虑省,于是網(wǎng)景公司設(shè)計(jì)了 SSL(Secure Sockets Layer)協(xié)議用于對(duì) HTTP 協(xié)議傳輸?shù)臄?shù)據(jù)進(jìn)行加密,從而就誕生了 HTTPS 僧凰。 SSL 目前的版本是3.0探颈,被 IETF(Internet Engineering Task Force)定義在 RFC 6101中,之后 IETF 對(duì) SSL 3.0進(jìn)行了升級(jí)训措,于是出現(xiàn)了 TLS(Transport Layer Security) 1.0伪节,定義在 RFC 2246。實(shí)際上我們現(xiàn)在的HTTPS都是用的 TLS 協(xié)議绩鸣,但是由于 SSL 出現(xiàn)的時(shí)間比較早怀大,并且依舊被現(xiàn)在瀏覽器所支持,因此 SSL 依然是 HTTPS 的代名詞呀闻,但無(wú)論是 TLS 還是 SSL 都是上個(gè)世紀(jì)的事情化借,SSL 最后一個(gè)版本是3.0,今后 TLS 將會(huì)繼承 SSL 優(yōu)良血統(tǒng)繼續(xù)為我們進(jìn)行加密服務(wù)捡多。目前 TLS 的版本是1.2蓖康,定義在 RFC 5246中,暫時(shí)還沒(méi)有被廣泛的使用垒手。
對(duì)歷史感興趣的朋友可以參考http://en.wikipedia.org/wiki/Transport_Layer_Security蒜焊,這里有對(duì)TLS/SSL詳盡的敘述。
二淫奔、HTTPS到底安全嗎山涡?
這個(gè)答案是肯定的,很安全唆迁。谷歌公司已經(jīng)行動(dòng)起來(lái)要大力推廣 HTTPS 的使用鸭丛,在未來(lái)幾周,谷歌將對(duì)全球所有本地域名都啟用 HTTPS 唐责,用戶只要在搜索前用Google帳號(hào)登錄鳞溉,之后所有的搜索操作都將使用 TLS 協(xié)議加密,見(jiàn):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)行一次握手看政,在握手過(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 算法,并將自己的身份信息以證書(shū)的形式發(fā)回給瀏覽器做入。證書(shū)里面包含了網(wǎng)站地址冒晰,加密公鑰,以及證書(shū)的頒發(fā)機(jī)構(gòu)等信息竟块。
3.獲得網(wǎng)站證書(shū)之后瀏覽器要做以下工作:
- 驗(yàn)證證書(shū)的合法性(頒發(fā)證書(shū)的機(jī)構(gòu)是否合法壶运,證書(shū)中包含的網(wǎng)站地址是否與正在訪問(wèn)的地址一致等),如果證書(shū)受信任浪秘,則瀏覽器欄里面會(huì)顯示一個(gè)小鎖頭蒋情,否則會(huì)給出證書(shū)不受信的提示。
- 如果證書(shū)受信任耸携,或者是用戶接受了不受信的證書(shū)恕出,瀏覽器會(huì)生成一串隨機(jī)數(shù)的密碼,并用證書(shū)中提供的公鑰加密违帆。
- 使用約定好的 HASH 計(jì)算握手消息,并使用生成的隨機(jī)數(shù)對(duì)消息進(jìn)行加密金蜀,最后將之前生成的所有信息發(fā)送給網(wǎng)站刷后。
4.網(wǎng)站接收瀏覽器發(fā)來(lái)的數(shù)據(jù)之后要做以下的操作:
- 使用自己的私鑰將信息解密取出密碼,使用密碼解密瀏覽器發(fā)來(lái)的握手消息渊抄,并驗(yàn)證 HASH 是否與瀏覽器發(fā)來(lái)的一致尝胆。
- 使用密碼加密一段握手消息,發(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ú)法從中找到下手的地方,于是更多的是采用了假證書(shū)的手法來(lái)欺騙客戶端奕扣,從而獲取明文的信息薪鹦,但是這些手段都可以被識(shí)別出來(lái),我將在后續(xù)的文章進(jìn)行講述惯豆。不過(guò)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),只是沒(méi)有公開(kāi)而已楷兽。目前微軟和Google已經(jīng)對(duì)此漏洞進(jìn)行了修復(fù)地熄。見(jiàn):http://support.microsoft.com/kb/2643584/en-ushttps://src.chromium.org/viewvc/chrome?view=rev&revision=90643