看似“雙胞胎”的http和https真的是一樣的嗎?

網(wǎng)絡(luò)是個(gè)奇妙的東西,有時(shí)候一點(diǎn)點(diǎn)小小的差別,可能就是另外的一番含義!今天,小編就給大家講一下,網(wǎng)絡(luò)里面的HTTPSHTTP的區(qū)別是什么!

HTTP

假設(shè)你現(xiàn)在正坐在教室里上課,現(xiàn)在你非常想和走道旁的迷人的 TA 說一些話,一般這個(gè)時(shí)候你會(huì)用“傳紙條”的方式來交流。而這個(gè)方式和 TCP/IP 協(xié)議基本的工作模式十分相像:

通過小動(dòng)作引起對(duì)方注意;

對(duì)方以多種可能的方式(注視、肢體語言等)回應(yīng)于你;

你確認(rèn)對(duì)方感知到你后,將紙條傳給對(duì)方;

對(duì)方閱讀紙條;

對(duì)方給予你閱讀后的反應(yīng);

怎么樣,這個(gè)流程是不是很熟悉?

如果你要傳遞紙條的 TA 距離你很遠(yuǎn)怎么辦?HTTP 協(xié)議就是指你在紙條上寫明你要傳給的 TA 是誰,或者 TA 的座位在哪,接著只需要途徑的同學(xué)拿到紙條后根據(jù)紙條上的指示依次將紙條傳過去就 OK 了。

這個(gè)時(shí)候問題來了:途徑的同學(xué)完全可以觀看并知道你在紙條上寫了什么。

這就是 HTTP 傳輸所面臨的問題之一:中間人攻擊,指消息傳遞的過程中,處在傳遞路徑上的攻擊者可以嗅探或者竊聽傳輸數(shù)據(jù)的內(nèi)容。

HTTPS

HTTPS 針對(duì)這個(gè)問題,采用了“加密”的方式來解決。最著名原始的加密方法就是對(duì)稱加密算法了,就是雙方約定一個(gè)暗號(hào),用什么字母替換什么字母之類的?,F(xiàn)在一般采用一種叫 AES(高級(jí)加密算法)的對(duì)稱算法。

對(duì)稱加密算法既指加密和解密需要使用的密鑰 key 是一樣的。

AES 在數(shù)學(xué)上保證了,只要你使用的 key 足夠長(zhǎng),破解幾乎是不可能的(除非光子計(jì)算機(jī)造出來了)

我們先假設(shè)在沒有密鑰 key 的情況下,密文是無法被破解的,然后再回到這個(gè)教室。你將用 AES 加密后的內(nèi)容噌噌噌地寫在了紙條上,正要傳出去的時(shí)候你突然想到,TA 沒有 key 怎么解密內(nèi)容呀,或者說,應(yīng)該怎么把 key 給TA?

如果把 key 也寫在紙條上,那么中間人照樣可以破解竊聽紙條內(nèi)容。也許在現(xiàn)實(shí)環(huán)境中你有其他辦法可以把 key 通過某種安全的渠道送到 TA 的手里,但是互聯(lián)網(wǎng)上的實(shí)現(xiàn)難度就比較大了,畢竟不管怎樣,數(shù)據(jù)都要經(jīng)過那些路由。

于是聰明的人類發(fā)明了另一種加密算法——非對(duì)稱加密算法。這種加密算法會(huì)生成兩個(gè)密鑰(key1 和 key2)。凡是 key1 加密的數(shù)據(jù),key1 自身不能解密,需要 key2 才能解密;凡事 key2 加密的數(shù)據(jù),key2 自身不能解密,只有 key1 才能解密。

目前這種算法有很多中,最常用的是 RSA。其基于的數(shù)學(xué)原理是:

兩個(gè)大素?cái)?shù)的乘積很容易算,但是用這個(gè)乘積去算出是哪兩個(gè)素?cái)?shù)相乘就很復(fù)雜了。好在以目前的技術(shù),分解大數(shù)的素因確實(shí)比較困難,尤其是當(dāng)這個(gè)大數(shù)足夠大的時(shí)候(通常使用2的10次方個(gè)二進(jìn)制位那么大),就算是超級(jí)計(jì)算機(jī),解密也需要非常長(zhǎng)的時(shí)間。

這個(gè)時(shí)候就是體現(xiàn) HTTPS 和傳紙條的區(qū)別了。在教室里,你是和一位與你身份幾乎對(duì)等的的對(duì)象來通信;而在訪問網(wǎng)站時(shí),對(duì)方往往是一個(gè)比較大(或者知名)的服務(wù)者,他們有充沛的資源,或許他們可以向你證明他們的合法性。

此時(shí)我們需要引入一個(gè)非常權(quán)威的第三方,一個(gè)專門用來認(rèn)證網(wǎng)站合法性的組織,可以叫做 CA(Certificate Authority)。各個(gè)網(wǎng)站服務(wù)商可以向 CA 申請(qǐng)證書,使得他們?cè)诮踩B接時(shí)可以帶上 CA 的簽名。而 CA 得安全性是由操作系統(tǒng)或者瀏覽器來認(rèn)證的。

一旦某個(gè) CA 頒發(fā)的證書被用于的非法途徑,那么這個(gè) CA 之前頒發(fā)過的所有證書都將被視為不安全的,這讓所有 CA 在頒發(fā)證書時(shí)都十分小心,所以 CA 證書在通常情況下是值得信任的。

正如聲網(wǎng)agora.io Web SDK考慮數(shù)據(jù)安全問題,限制了http訪問getUserMedia接口,只能通過https方式訪問。所以會(huì)出現(xiàn)用http在Chrome瀏覽器(47以上版本)中訪問Agora服務(wù)失敗,我該怎么辦?

Agora Web解決方案基于WebRTC技術(shù)建立瀏覽器間的音視頻通信,在WebRTC協(xié)議中,瀏覽器通過getUserMedia接口獲取視頻(通過攝像頭)和音頻(通過麥克風(fēng))數(shù)據(jù),Google Chrome是支持WebRTC的主流瀏覽器之一,在v47及以上版本,考慮到數(shù)據(jù)安全問題,限制了http訪問getUserMedia接口,只能通過https方式訪問。除了chrome瀏覽器外,Opera瀏覽器在v34版本后也跟進(jìn)了對(duì)http的限制,F(xiàn)irefox暫時(shí)沒有此更新。但是考慮到https是WebRTC協(xié)議推薦的安全訪問方式,建議客戶統(tǒng)一通過https來訪問Agora Web服務(wù),也能兼容各瀏覽器平臺(tái)。