HTTPS原理和CA证书申请
轉(zhuǎn)載自:HTTPS原理和CA證書申請(qǐng)(滿滿的干貨)
眾所周知,WEB服務(wù)存在http和https兩種通信方式,http默認(rèn)采用80作為通訊端口,對(duì)于傳輸采用不加密的方式,https默認(rèn)采用443,對(duì)于傳輸?shù)臄?shù)據(jù)進(jìn)行加密傳輸
目前主流的網(wǎng)站基本上開始默認(rèn)采用HTTPS作為通信方式,一切的考慮都基于對(duì)安全的要求,那么如何對(duì)自己的網(wǎng)站配置HTTPS通信,是本文著重介紹的
本文的主要內(nèi)容包括:https加密傳輸?shù)脑怼⑷绾紊暾?qǐng)https所用的CA證書,如何配置WEB服務(wù)支持https
https原理通俗講解
https=http+ssl,顧名思義,https是在http的基礎(chǔ)上加上了SSL保護(hù)殼,信息的加密過程就是在SSL中完成的
首先我們先不談https,先從一個(gè)簡(jiǎn)單的通訊原理圖講起:
http通信原理
客戶端發(fā)送一句client hello給服務(wù)器端,服務(wù)器端返回一句serverhello給客戶端,鑒于本文討論是https的加密主題,我們只討論信息傳輸?shù)募用軉栴}
實(shí)現(xiàn)客戶端和服務(wù)端發(fā)送的信息client hello 和server hello,即使中間的包被竊取了,也無(wú)法解密傳輸?shù)膬?nèi)容
http:client hello和server hello在通訊的過程中,以明文的形式進(jìn)行傳輸,采用wireshark抓包的效果如下圖:
有沒有感覺這個(gè)的信息傳輸是完全暴露在互聯(lián)網(wǎng)上面,你請(qǐng)求的所有信息都可以被窺測(cè)到,是不是感覺心一涼,不過不用擔(dān)心,我們的安全信息現(xiàn)在都是采用https的傳輸,后面講到https的時(shí)候大家心里會(huì)頓時(shí)輕松。但這不是最關(guān)鍵的,http的傳輸最大的隱患是信息劫持和篡改,如下圖:
可以看到,http的信息傳輸中,信息很容易被×××給劫持,更有甚者,×××可以偽裝服務(wù)器將篡改后的信息返回給用戶,試想一下,如果×××劫持的是你的銀行信息,是不是很可怕。所以對(duì)于http傳出存在的問題可以總結(jié)如下:
(1)信息篡改:修改通信的內(nèi)容
(2)信息劫持:攔截到信息通信的內(nèi)容
這些是http不安全的體現(xiàn),說完http,我們回到本文的主題https,看下人家是怎么保護(hù)信息的,所有的請(qǐng)求信息都采用了TLS加密,如果沒有秘鑰是無(wú)法解析傳輸?shù)氖鞘裁葱畔?/p>
對(duì)于加密傳輸存在對(duì)稱加密和非對(duì)稱加密
對(duì)稱加密 ——對(duì)稱加密傳輸
當(dāng)客戶端發(fā)送Hello字符串的時(shí)候,在進(jìn)行信息傳輸前,采用加密算法(上圖中的秘鑰S)將hello加密程JDuEW8&*21!@#進(jìn)行傳輸,即使中間被×××劫持了,如果沒有對(duì)應(yīng)的秘鑰S也無(wú)法知道傳出的信息為何物,在上圖中信息的加密和解密都是通過同一個(gè)秘鑰進(jìn)行的,對(duì)于這種加密我們稱之為對(duì)稱加密,只要A和B之間知道加解密的秘鑰,任何第三方都無(wú)法獲取秘鑰S,則在一定條件下,基本上解決了信息通信的安全問題。但在現(xiàn)實(shí)的情況下(www),實(shí)際的通訊模型遠(yuǎn)比上圖復(fù)雜,下圖為實(shí)際的通信模型
server和所有的client都采用同一個(gè)秘鑰S進(jìn)行加解密,但大家思考下,如果這樣的話,無(wú)異于沒有加密,請(qǐng)做下思考
由于server和所有的client都采用同一個(gè)秘鑰S,則×××們作為一個(gè)client也可以獲取到秘鑰S,此地?zé)o銀三百兩。所以在實(shí)際的通訊中,一般不會(huì)采用同一個(gè)秘鑰,而是采用不同的秘鑰加解密,如下圖——通過協(xié)商的方式獲取不同的秘鑰
如上圖,A和server通信采用對(duì)稱加密A算法,B和server通信采用對(duì)稱秘鑰B算法,因此可以很好的解決了不同的客戶端采用相同的秘鑰進(jìn)行通訊的問題
那現(xiàn)在又存在問題了,A通過明文傳輸和server協(xié)商采用了加密算法A,但這條信息本身是沒有加密的,因此×××們還是可以竊取到秘鑰的,整個(gè)的通訊仍然存在風(fēng)險(xiǎn)。那該如何處理呢?有人說,把這條信息(協(xié)調(diào)秘鑰的過程)再次加密,那是不是還要協(xié)商加密秘鑰,如此反復(fù),永無(wú)止境。從根本上無(wú)法解決信息通訊的安全問題
如何對(duì)協(xié)商過程進(jìn)行加密 ( 非對(duì)稱加密原理圖)
在密碼學(xué)跟對(duì)稱加密一起出現(xiàn)的,應(yīng)用最廣的加密機(jī)制“非對(duì)稱加密”,如上圖,特點(diǎn)是私鑰加密后的密文,只要是公鑰,都可以解密,但是反過來(lái)公鑰加密后的密文,只有私鑰可以解密。私鑰只有一個(gè)人有,而公鑰可以發(fā)給所有的人。
基于上述的特點(diǎn),我們可以得出如下結(jié)論:
(1)公鑰是開放給所有人的,但私鑰是需要保密的,存在于服務(wù)端
(2)服務(wù)器端server向client端(A、B…)的信息傳輸是不安全的:因?yàn)樗腥硕伎梢垣@取公鑰
(3)但client端(A、B…)向server端的信息傳輸確實(shí)安全的:因?yàn)樗借€只有server端存在
因此,如何協(xié)商加密算法的問題,我們解決了,非對(duì)稱加密算法進(jìn)行對(duì)稱加密算法協(xié)商過程。
在這里我們做個(gè)小結(jié):
信息通信采用http是不安全的,存在信息劫持、篡改的風(fēng)險(xiǎn),https是加密傳輸,是安全的通信,對(duì)于https加密的過程,我們首先介紹的對(duì)稱加密,采用對(duì)稱加密進(jìn)行通信存在秘鑰協(xié)商過程的不安全性,因此我們采用了非對(duì)稱加密算法解決了對(duì)協(xié)商過程的加密,因此https是集對(duì)稱加密和非對(duì)稱加密為一體的加密過程
安全的獲取公鑰
細(xì)心的人可能已經(jīng)注意到了如果使用非對(duì)稱加密算法,我們的客戶端A,B需要一開始就持有公鑰,要不沒法開展加密行為啊。
這下,我們又遇到新問題了,如何讓A、B客戶端安全地得到公鑰?
client獲取公鑰最最直接的方法是服務(wù)器端server將公鑰發(fā)送給每一個(gè)client用戶,但這個(gè)時(shí)候就出現(xiàn)了公鑰被劫持的問題,如上圖,client請(qǐng)求公鑰,在請(qǐng)求返回的過程中被×××劫持,那么我們將采用劫持后的假秘鑰進(jìn)行通信,則后續(xù)的通訊過程都是采用假秘鑰進(jìn)行,數(shù)據(jù)庫(kù)的風(fēng)險(xiǎn)仍然存在。在獲取公鑰的過程中,我們又引出了一個(gè)新的話題:如何安全的獲取公鑰,并確保公鑰的獲取是安全的, 那就需要用到終極武器了:SSL 證書(需要購(gòu)買)和CA機(jī)構(gòu)
如上圖所示,在第 ② 步時(shí)服務(wù)器發(fā)送了一個(gè)SSL證書給客戶端,SSL 證書中包含的具體內(nèi)容有證書的頒發(fā)機(jī)構(gòu)、有效期、公鑰、證書持有者、簽名,通過第三方的校驗(yàn)保證了身份的合法,解決了公鑰獲取的安全性
以瀏覽器為例說明如下整個(gè)的校驗(yàn)過程:
(1)首先瀏覽器讀取證書中的證書所有者、有效期等信息進(jìn)行一一校驗(yàn)
(2)瀏覽器開始查找操作系統(tǒng)中已內(nèi)置的受信任的證書發(fā)布機(jī)構(gòu)CA,與服務(wù)器發(fā)來(lái)的證書中的頒發(fā)者CA比對(duì),用于校驗(yàn)證書是否為合法機(jī)構(gòu)頒發(fā)
(3)如果找不到,瀏覽器就會(huì)報(bào)錯(cuò),說明服務(wù)器發(fā)來(lái)的證書是不可信任的。
(4)如果找到,那么瀏覽器就會(huì)從操作系統(tǒng)中取出 頒發(fā)者CA 的公鑰,然后對(duì)服務(wù)器發(fā)來(lái)的證書里面的簽名進(jìn)行解密
(5)瀏覽器使用相同的hash算法計(jì)算出服務(wù)器發(fā)來(lái)的證書的hash值,將這個(gè)計(jì)算的hash值與證書中簽名做對(duì)比
(6)對(duì)比結(jié)果一致,則證明服務(wù)器發(fā)來(lái)的證書合法,沒有被冒充
(7)此時(shí)瀏覽器就可以讀取證書中的公鑰,用于后續(xù)加密了
至此第一部分關(guān)于HTTPS的原理介紹已經(jīng)結(jié)束了,總結(jié)一下:
HTTPS要使客戶端與服務(wù)器端的通信過程得到安全保證,必須使用的對(duì)稱加密算法,但是協(xié)商對(duì)稱加密算法的過程,需要使用非對(duì)稱加密算法來(lái)保證安全,然而直接使用非對(duì)稱加密的過程本身也不安全,會(huì)有中間人篡改公鑰的可能性,所以客戶端與服務(wù)器不直接使用公鑰,而是使用數(shù)字證書簽發(fā)機(jī)構(gòu)頒發(fā)的證書來(lái)保證非對(duì)稱加密過程本身的安全。這樣通過這些機(jī)制協(xié)商出一個(gè)對(duì)稱加密算法,就此雙方使用該算法進(jìn)行加密解密。從而解決了客戶端與服務(wù)器端之間的通信安全問題。
總結(jié)
以上是生活随笔為你收集整理的HTTPS原理和CA证书申请的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用python爬虫(part12)--
- 下一篇: 时间序列与R语言应用(part4)--自