“HTTPS”安全在(zài)哪裏?
在(zài)上(shàng)網獲取信息的(de)過程中,我們接觸最多的(de)信息加密傳輸方式也(yě)莫過于(yú) HTTPS 了(le/liǎo)。每當訪問一(yī / yì /yí)個(gè)站點,浏覽器的(de)地(dì / de)址欄中出(chū)現綠色圖标時(shí),意味着該站點支持 HTTPS 信息傳輸方式。我們知道(dào) HTTPS 是(shì)我們常見的(de) HTTP 協議與某個(gè)加密協議的(de)混合體,也(yě)就(jiù)是(shì) HTTP+S。這(zhè)個(gè) S 可以(yǐ)是(shì) TLS(安全傳輸層協議)、也(yě)可以(yǐ)是(shì) SSL(安全套接層),不(bù)過我更認可另一(yī / yì /yí)個(gè)抽象概括的(de)說(shuō)法,HTTP+Security。不(bù)過要(yào / yāo)談論 HTTPS 爲(wéi / wèi)何安全,還得從 HTTP 爲(wéi / wèi)何不(bù)安全說(shuō)起。
假設你現在(zài)正坐在(zài)教室裏上(shàng)課,現在(zài)你非常想和(hé / huò)走道(dào)旁的(de)迷人(rén)的(de) TA 說(shuō)一(yī / yì /yí)些話,一(yī / yì /yí)般這(zhè)個(gè)時(shí)候你會用“傳紙條”的(de)方式來(lái)交流。而(ér)這(zhè)個(gè)方式和(hé / huò) TCP/IP 協議基本的(de)工作模式十分相像:
通過小動作引起對方注意;
對方以(yǐ)多種可能的(de)方式(注視、肢體語言等)回應于(yú)你;
你确認對方感知到(dào)你後,将紙條傳給對方;
對方閱讀紙條;
-
對方給予你閱讀後的(de)反應;
怎麽樣,這(zhè)個(gè)流程是(shì)不(bù)是(shì)很熟悉?
如果你要(yào / yāo)傳遞紙條的(de) TA 距離你很遠怎麽辦?HTTP 協議就(jiù)是(shì)指你在(zài)紙條上(shàng)寫明你要(yào / yāo)傳給的(de) TA 是(shì)誰,或者 TA 的(de)座位在(zài)哪,接着隻需要(yào / yāo)途徑的(de)同學拿到(dào)紙條後根據紙條上(shàng)的(de)指示依次将紙條傳過去就(jiù) OK 了(le/liǎo)。
這(zhè)個(gè)時(shí)候問題來(lái)了(le/liǎo):途徑的(de)同學完全可以(yǐ)觀看并知道(dào)你在(zài)紙條上(shàng)寫了(le/liǎo)什麽。
這(zhè)就(jiù)是(shì) HTTP 傳輸所面臨的(de)問題之(zhī)一(yī / yì /yí):中間人(rén)攻擊,指消息傳遞的(de)過程中,處在(zài)傳遞路徑上(shàng)的(de)攻擊者可以(yǐ)嗅探或者竊聽傳輸數據的(de)内容。
加密
HTTPS 針對這(zhè)個(gè)問題,采用了(le/liǎo)“加密”的(de)方式來(lái)解決。最著名原始的(de)加密方法就(jiù)是(shì)對稱加密算法了(le/liǎo),就(jiù)是(shì)雙方約定一(yī / yì /yí)個(gè)暗号,用什麽字母替換什麽字母之(zhī)類的(de)。現在(zài)一(yī / yì /yí)般采用一(yī / yì /yí)種叫 AES(高級加密算法)的(de)對稱算法。
對稱加密算法既指加密和(hé / huò)解密需要(yào / yāo)使用的(de)密鑰 key 是(shì)一(yī / yì /yí)樣的(de)。
AES 在(zài)數學上(shàng)保證了(le/liǎo),隻要(yào / yāo)你使用的(de) key 足夠長,破解幾乎是(shì)不(bù)可能的(de)(除非光子(zǐ)計算機造出(chū)來(lái)了(le/liǎo))
我們先假設在(zài)沒有密鑰 key 的(de)情況下,密文是(shì)無法被破解的(de),然後再回到(dào)這(zhè)個(gè)教室。你将用 AES 加密後的(de)内容噌噌噌地(dì / de)寫在(zài)了(le/liǎo)紙條上(shàng),正要(yào / yāo)傳出(chū)去的(de)時(shí)候你突然想到(dào),TA 沒有 key 怎麽解密内容呀,或者說(shuō),應該怎麽把 key 給TA?
如果把 key 也(yě)寫在(zài)紙條上(shàng),那麽中間人(rén)照樣可以(yǐ)破解竊聽紙條内容。也(yě)許在(zài)現實環境中你有其他(tā)辦法可以(yǐ)把 key 通過某種安全的(de)渠道(dào)送到(dào) TA 的(de)手裏,但是(shì)互聯網上(shàng)的(de)實現難度就(jiù)比較大(dà)了(le/liǎo),畢竟不(bù)管怎樣,數據都要(yào / yāo)經過那些路由。
于(yú)是(shì)聰明的(de)人(rén)類發明了(le/liǎo)另一(yī / yì /yí)種加密算法——非對稱加密算法。這(zhè)種加密算法會生成兩個(gè)密鑰(key1 和(hé / huò) key2)。凡是(shì) key1 加密的(de)數據,key1 自身不(bù)能解密,需要(yào / yāo) key2 才能解密;凡事 key2 加密的(de)數據,key2 自身不(bù)能解密,隻有 key1 才能解密。
目前這(zhè)種算法有很多中,最常用的(de)是(shì) RSA。其基于(yú)的(de)數學原理是(shì):
兩個(gè)大(dà)素數的(de)乘積很容易算,但是(shì)用這(zhè)個(gè)乘積去算出(chū)是(shì)哪兩個(gè)素數相乘就(jiù)很複雜了(le/liǎo)。好在(zài)以(yǐ)目前的(de)技術,分解大(dà)數的(de)素因确實比較困難,尤其是(shì)當這(zhè)個(gè)大(dà)數足夠大(dà)的(de)時(shí)候(通常使用2的(de)10次方個(gè)二進制位那麽大(dà)),就(jiù)算是(shì)超級計算機,解密也(yě)需要(yào / yāo)非常長的(de)時(shí)間。
現在(zài)就(jiù)把這(zhè)種非對稱加密的(de)方法應用在(zài)我們教室傳紙條的(de)場景裏。
你在(zài)寫紙條内容之(zhī)前先用 RSA 技術生成了(le/liǎo)一(yī / yì /yí)對密鑰 k1 和(hé / huò) k2。
你把 k1 用明文傳了(le/liǎo)出(chū)去,路經也(yě)許有人(rén)會截取,但是(shì)沒有用,k1 加密的(de)數據需要(yào / yāo) k2 才可以(yǐ)破解,而(ér) k2 在(zài)你自己手中。
k1 傳到(dào)了(le/liǎo)目的(de)人(rén),目的(de)人(rén)會去準備一(yī / yì /yí)個(gè)接下來(lái)準備用于(yú)對稱加密(AES)的(de)傳輸密鑰 key,然後用收到(dào)的(de) k1 把 key 加密,傳給你。
-
你用手上(shàng)的(de) k2 解出(chū) key 後,全教室隻有你和(hé / huò)你的(de)目的(de)人(rén)擁有這(zhè)個(gè)對稱加密的(de) key,你們倆就(jiù)可以(yǐ)盡情聊天不(bù)怕竊聽啦~
這(zhè)裏也(yě)許你會有問題,爲(wéi / wèi)什麽不(bù)直接用非對稱加密來(lái)加密信息,而(ér)是(shì)加密 AES 的(de) key 呢?
因爲(wéi / wèi)非對稱加密和(hé / huò)解密的(de)平均消耗時(shí)間比較長,爲(wéi / wèi)了(le/liǎo)節省時(shí)間提高效率,我們通常隻是(shì)用它來(lái)交換密鑰,而(ér)非直接傳輸數據。
然而(ér)使用非對稱加密真的(de)可以(yǐ)防範中間人(rén)攻擊嗎?
雖然看上(shàng)去很安全,但是(shì)實際上(shàng)卻擋不(bù)住可惡的(de)中間人(rén)攻擊。
假設你是(shì) A,你的(de)目的(de)地(dì / de)是(shì) B,現在(zài)要(yào / yāo)途徑一(yī / yì /yí)個(gè)惡意同學M。
中間人(rén)的(de)惡意之(zhī)處在(zài)于(yú)它會僞裝成你的(de)目标。
當你要(yào / yāo)和(hé / huò) B 完成第一(yī / yì /yí)次密鑰交換的(de)時(shí)候,M 把紙條扣了(le/liǎo)下來(lái),假裝自己是(shì)B并僞造了(le/liǎo)一(yī / yì /yí)個(gè) key,然後用你發來(lái)的(de) k1 加密了(le/liǎo) key 發還給你。
你以(yǐ)爲(wéi / wèi)你和(hé / huò) B 完成了(le/liǎo)密鑰交換,實際上(shàng)你是(shì)和(hé / huò) M 完成了(le/liǎo)密鑰交換。
同事 M 和(hé / huò) B 完成一(yī / yì /yí)次密鑰交換,讓 B 以(yǐ)爲(wéi / wèi)和(hé / huò) A 你完成了(le/liǎo)密鑰交換。
-
現在(zài)整體的(de)加密流程變成了(le/liǎo)A(加密鏈接1)->M(明文)->B(加密鏈接2)的(de)情況了(le/liǎo),這(zhè)時(shí)候 M 依然可以(yǐ)知道(dào)A和(hé / huò)B傳輸的(de)全部消息。
這(zhè)個(gè)時(shí)候就(jiù)是(shì)體現 HTTPS 和(hé / huò)傳紙條的(de)區别了(le/liǎo)。在(zài)教室裏,你是(shì)和(hé / huò)一(yī / yì /yí)位與你身份幾乎對等的(de)的(de)對象來(lái)通信;而(ér)在(zài)訪問網站時(shí),對方往往是(shì)一(yī / yì /yí)個(gè)比較大(dà)(或者知名)的(de)服務者,他(tā)們有充沛的(de)資源,或許他(tā)們可以(yǐ)向你證明他(tā)們的(de)合法性。
此時(shí)我們需要(yào / yāo)引入一(yī / yì /yí)個(gè)非常權威的(de)第三方,一(yī / yì /yí)個(gè)專門用來(lái)認證網站合法性的(de)組織,可以(yǐ)叫做 CA(Certificate Authority)。各個(gè)網站服務商可以(yǐ)向 CA 申請證書,使得他(tā)們在(zài)建立安全連接時(shí)可以(yǐ)帶上(shàng) CA 的(de)簽名。而(ér) CA 得安全性是(shì)由操作系統或者浏覽器來(lái)認證的(de)。
你的(de) Windows、Mac、Linux、Chrome、Safari 等會在(zài)安裝的(de)時(shí)候帶上(shàng)一(yī / yì /yí)個(gè)他(tā)們認爲(wéi / wèi)安全的(de) CA 證書列表,隻有和(hé / huò)你建立安全連接的(de)網站帶有這(zhè)些CA的(de)簽名,操作系統和(hé / huò)浏覽器才會認爲(wéi / wèi)這(zhè)個(gè)鏈接是(shì)安全的(de),否則就(jiù)有可能遭到(dào)中間人(rén)攻擊。
一(yī / yì /yí)旦某個(gè) CA 頒發的(de)證書被用于(yú)的(de)非法途徑,那麽這(zhè)個(gè) CA 之(zhī)前頒發過的(de)所有證書都将被視爲(wéi / wèi)不(bù)安全的(de),這(zhè)讓所有 CA 在(zài)頒發證書時(shí)都十分小心,所以(yǐ) CA 證書在(zài)通常情況下是(shì)值得信任的(de)。
總結
使 HTTP 後面增加一(yī / yì /yí)個(gè)S(Security)的(de)技術,正是(shì) 對稱加密 + 非對稱加密 + CA 認證 這(zhè)三種技術的(de)混合體。當然這(zhè)個(gè)主要(yào / yāo)是(shì) HTTPS 的(de)基本原理,真正實際中的(de) HTTPS 的(de)協議是(shì)比以(yǐ)上(shàng)的(de)描述更爲(wéi / wèi)複雜一(yī / yì /yí)些的(de),并且其中任何一(yī / yì /yí)步稍有閃失,整個(gè)流程都将不(bù)再安全。
這(zhè)也(yě)是(shì)爲(wéi / wèi)什麽 HTTPS 協議從 SSL 1.0升級到(dào) SSL 3.0,再被 TLS 1.0 現在(zài)被 TLS 1.3取代,其背後都是(shì)一(yī / yì /yí)個(gè)個(gè)細節上(shàng)的(de)優化,以(yǐ)防有任何閃失。
TLS 協議相比 SSL 協議增加了(le/liǎo)傳輸層的(de)安全保證。
- 上(shàng)一(yī / yì /yí)篇:青島網站建設之(zhī)前端測試服務
- 下一(yī / yì /yí)篇:降低網站跳出(chū)率的(de)21種方法