一文看懂HTTPS、证书机构(CA)、证书、数字签名、私钥、公钥
君問歸期未有期
說到https,我們就不得不說tls/ssl,那說到tls/ssl,我們就不得不說證書機(jī)構(gòu)(CA)、證書、數(shù)字簽名、私鑰、公鑰、對(duì)稱加密、非對(duì)稱加密。這些到底有什么用呢,正所謂存在即合理,這篇文章我就帶你們捋一捋這其中的關(guān)系。
對(duì)稱加密
對(duì)稱加密是指雙方持有相同的密鑰進(jìn)行通信,加密速度快,但是有一個(gè)安全問題,雙方怎樣獲得相同的密鑰?你總不能總是拿著U盤把密鑰拷貝給對(duì)方吧。
常見的對(duì)稱加密算法有DES、3DES、AES等
非對(duì)稱加密
非對(duì)稱加密,又稱為公開密鑰加密,是為了解決對(duì)稱加密中的安全問題而誕生,一個(gè)稱為公開密鑰(public key),即公鑰,另一個(gè)稱為私鑰(private key),即私鑰。但是它的加密速度相對(duì)于對(duì)稱加密來說很慢。
- 公鑰(public key)是對(duì)外開放的,私鑰(private key)是自己擁有的。
- 公鑰(public key)加密的數(shù)據(jù),只能用私鑰(private key)解密。
- 私鑰(private key)加密的數(shù)據(jù),只能用公鑰(public key)解密。
信息安全問題
在信息安全性問題中,我們常常要做到三點(diǎn)才能保證信息的安全:
信息的保密性(加密算法)
信息的保密性我們可以使用對(duì)稱加密和非對(duì)稱加密來完成,使用對(duì)稱加密來完成,速度相對(duì)非對(duì)稱加密很快,但是存在一個(gè)安全問題,密鑰如何傳遞?由此通用的方法是使用非對(duì)稱加密+對(duì)稱加密來完成。客戶端使用公鑰對(duì)對(duì)稱加密的密鑰進(jìn)行加密,然后傳遞給服務(wù)端,服務(wù)端使用私鑰進(jìn)行解密確認(rèn)密鑰,開始傳輸數(shù)據(jù)。
?
image.png
信息的完整性(數(shù)字簽名)
信息傳輸?shù)耐局?#xff0c;我們的信息很有可能被第三方劫持篡改,所以我們需要保證信息的完整性,通用方法是使用散列算法如SHA1,MD5將傳輸內(nèi)容hash一次獲得hash值,即摘要。客戶端使用服務(wù)端的公鑰對(duì)摘要和信息內(nèi)容進(jìn)行加密,然后傳輸給服務(wù)端,服務(wù)端使用私鑰進(jìn)行解密獲得原始內(nèi)容和摘要值,這時(shí)服務(wù)端使用相同的hash算法對(duì)原始內(nèi)容進(jìn)行hash,然后與摘要值比對(duì),如果一致,說明信息是完整的。
?
image.png
身份識(shí)別(數(shù)字證書)
在信息傳輸?shù)倪^程中,我們通常需要驗(yàn)證信息的發(fā)送方的身份,這時(shí)我們轉(zhuǎn)化一下思路就可以完成,把發(fā)送端的公鑰發(fā)送給接收端,發(fā)送端通過把自己的內(nèi)容使用私鑰加密然后發(fā)送給接收端,接收端只能用發(fā)送端的公鑰解密,自然就驗(yàn)證了發(fā)送端的身份。
?
image.png
數(shù)字證書
在傳輸?shù)倪^程中,客戶端如何獲得服務(wù)器端的公鑰呢?當(dāng)時(shí)是服務(wù)器分發(fā)給客戶端,如果一開始服務(wù)端發(fā)送的公鑰到客戶端的過程中有可能被第三方劫持,然后第三方自己偽造一對(duì)密鑰,將公鑰發(fā)送給客戶端,當(dāng)服務(wù)器發(fā)送數(shù)據(jù)給客戶端的時(shí)候,中間人將信息進(jìn)行劫持,用一開始劫持的公鑰進(jìn)行解密后,然后使用自己的私鑰將數(shù)據(jù)加密發(fā)送給客戶端,而客戶端收到后使用公鑰解密,反過來亦是如此,整個(gè)過程中間人是透明的,但信息泄露卻不得而知。
?
image.png
為了防止這種情況,數(shù)字證書就出現(xiàn)了,它其實(shí)就是基于上上面所說的私鑰加密數(shù)據(jù),公鑰解密來驗(yàn)證其身份。
數(shù)字證書是由權(quán)威的CA(Certificate Authority)機(jī)構(gòu)給服務(wù)端進(jìn)行頒發(fā),CA機(jī)構(gòu)通過服務(wù)端提供的相關(guān)信息生成證書,證書內(nèi)容包含了持有人的相關(guān)信息,服務(wù)器的公鑰,簽署者簽名信息(數(shù)字簽名)等,最重要的是公鑰在數(shù)字證書中。
數(shù)字證書是如何保證公鑰來自請(qǐng)求的服務(wù)器呢?數(shù)字證書上由持有人的相關(guān)信息,通過這點(diǎn)可以確定其不是一個(gè)中間人;但是證書也是可以偽造的,如何保證證書為真呢?
一個(gè)證書中含有三個(gè)部分:"證書內(nèi)容,散列算法,加密密文",證書內(nèi)容會(huì)被散列算法hash計(jì)算出hash值,然后使用CA機(jī)構(gòu)提供的私鑰進(jìn)行RSA加密。
?
image.png
當(dāng)客戶端發(fā)起請(qǐng)求時(shí),服務(wù)器將該數(shù)字證書發(fā)送給客戶端,客戶端通過CA機(jī)構(gòu)提供的公鑰對(duì)加密密文進(jìn)行解密獲得散列值(數(shù)字簽名),同時(shí)將證書內(nèi)容使用相同的散列算法進(jìn)行Hash得到另一個(gè)散列值,比對(duì)兩個(gè)散列值,如果兩者相等則說明證書沒問題。
?
image.png
一些常見的證書文件類型如下:
X.509#DER 二進(jìn)制格式證書,常用后綴.cer .crt
X.509#PEM 文本格式證書,常用后綴.pem
有的證書內(nèi)容是只包含公鑰(服務(wù)器的公鑰),如.crt、.cer、.pem
有的證書既包含公鑰又包含私鑰(服務(wù)器的私鑰),如.pfx、.p12
HTTPS,TLS/SSL
Hyper Text Transfer Protocol over Secure Socket Layer,安全的超文本傳輸協(xié)議,網(wǎng)景公式設(shè)計(jì)了SSL(Secure Sockets Layer)協(xié)議用于對(duì)Http協(xié)議傳輸?shù)臄?shù)據(jù)進(jìn)行加密,保證會(huì)話過程中的安全性。
使用TCP端口默認(rèn)為443
TLS:(Transport Layer Security,傳輸層安全協(xié)議),用于兩個(gè)應(yīng)用程序之間提供保密性和數(shù)據(jù)完整性。
SSL:(Secure Socket Layer,安全套接字層),位于可靠的面向連接的網(wǎng)絡(luò)層協(xié)議和應(yīng)用層協(xié)議之間的一種協(xié)議層。SSL通過互相認(rèn)證、使用數(shù)字簽名確保完整性、使用加密確保私密性,以實(shí)現(xiàn)客戶端和服務(wù)器之間的安全通訊。
SSL協(xié)議即用到了對(duì)稱加密也用到了非對(duì)稱加密(公鑰加密),在建立傳輸鏈路時(shí),SSL首先對(duì)對(duì)稱加密的密鑰使用公鑰進(jìn)行非對(duì)稱加密,鏈路建立好之后,SSL對(duì)傳輸內(nèi)容使用對(duì)稱加密。
對(duì)稱加密
速度高,可加密內(nèi)容較大,用來加密會(huì)話過程中的消息
公鑰加密
加密速度較慢,但能提供更好的身份認(rèn)證技術(shù),用來加密對(duì)稱加密的密鑰
?
image.png
HTTPS單向認(rèn)證
Https在建立Socket連接之前,需要進(jìn)行握手,具體過程如下:
?
image.png
客戶端向服務(wù)端發(fā)送SSL協(xié)議版本號(hào)、加密算法種類、隨機(jī)數(shù)等信息;
服務(wù)端給客戶端返回SSL協(xié)議版本號(hào)、加密算法種類、隨機(jī)數(shù)等信息,同時(shí)也返回服務(wù)器端的證書,即公鑰證書;
客戶端使用服務(wù)端返回的信息驗(yàn)證服務(wù)器的合法性,包括:
- 證書是否過期;
- 發(fā)行服務(wù)器證書的CA是否可靠;(通過查詢?yōu)g覽器或本機(jī)內(nèi)的CA證書)
- 返回的公鑰是否能正確解開返回證書中的數(shù)字簽名;(通過使用本機(jī)或?yàn)g覽器內(nèi)置的CA公鑰進(jìn)行解密)
- 服務(wù)器證書上的域名是否和服務(wù)器的實(shí)際域名相匹配;
- 驗(yàn)證通過后,將繼續(xù)進(jìn)行通信,否則,終止通信;
客戶端向服務(wù)端發(fā)送自己所能支持的對(duì)稱加密方案,供服務(wù)器端進(jìn)行選擇;
服務(wù)器端在客戶端提供的加密方案中選擇加密程度最高的加密方式;
服務(wù)器將選擇好的加密方案通過明文方式返回給客戶端;
客戶端接收到服務(wù)端返回的加密方式后,使用該加密方式生成產(chǎn)生隨機(jī)碼,用作通信過程中對(duì)稱加密的密鑰,使用服務(wù)端返回的公鑰進(jìn)行加密,將加密后的隨機(jī)碼發(fā)送至服務(wù)器;
服務(wù)器收到客戶端返回的加密信息后,使用自己的私鑰進(jìn)行解密,獲取對(duì)稱加密密鑰;
在接下來的會(huì)話中,服務(wù)器和客戶端將會(huì)使用該密碼進(jìn)行對(duì)稱加密,保證通信過程中信息的安全;
HTTPS雙向認(rèn)證
雙向認(rèn)證和單向認(rèn)證類似,它額外增加了服務(wù)端對(duì)客戶端的認(rèn)證:
?
image.png
客戶端向服務(wù)端發(fā)送SSL協(xié)議版本號(hào)、加密算法種類、隨機(jī)數(shù)等信息;
服務(wù)端給客戶端返回SSL協(xié)議版本號(hào)、加密算法種類、隨機(jī)數(shù)等信息,同時(shí)也返回服務(wù)器端的證書,即公鑰證書;
客戶端使用服務(wù)端返回的信息驗(yàn)證服務(wù)器的合法性,包括:
- 證書是否過期;
- 發(fā)行服務(wù)器證書的CA是否可靠;(通過查詢?yōu)g覽器或本機(jī)內(nèi)的CA證書)
- 返回的公鑰是否能正確解開返回證書中的數(shù)字簽名;(通過使用本機(jī)或?yàn)g覽器內(nèi)置的CA公鑰進(jìn)行解密)
- 服務(wù)器證書上的域名是否和服務(wù)器的實(shí)際域名相匹配;
- 驗(yàn)證通過后,將繼續(xù)進(jìn)行通信,否則,終止通信;
服務(wù)端要求客戶端發(fā)送客戶端的證書即客戶端證書公鑰,客戶端會(huì)將自己的證書發(fā)送至服務(wù)端;
驗(yàn)證客戶端的證書,通過驗(yàn)證后,會(huì)獲得客戶端的公鑰;
客戶端向服務(wù)端發(fā)送自己所能支持的對(duì)稱加密方案,供服務(wù)器端進(jìn)行選擇
服務(wù)器端在客戶端提供的加密方案中選擇加密程度最高的加密方式;
將加密方案通過使用之前獲取到的公鑰進(jìn)行加密,返回給客戶端
客戶端收到服務(wù)端返回的加密方案密文后,使用自己的私鑰進(jìn)行解密,獲取具體加密方式,而后,產(chǎn)生該加密方式的隨機(jī)碼,用作加密過程中的密鑰,使用之前從服務(wù)端證書中獲取到的公鑰進(jìn)行加密后,發(fā)送給服務(wù)端;
服務(wù)端收到客戶端發(fā)送的消息后,使用自己的私鑰進(jìn)行解密,獲取對(duì)稱加密的密鑰,在接下來的會(huì)話中,服務(wù)器和客戶端將會(huì)使用該密碼進(jìn)行對(duì)稱加密,保證通信過程中信息的安全;
作者:olaH
鏈接:https://www.jianshu.com/p/29e0ba31fb8d
來源:簡書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
總結(jié)
以上是生活随笔為你收集整理的一文看懂HTTPS、证书机构(CA)、证书、数字签名、私钥、公钥的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 单片机发送中文短信
- 下一篇: 【趋势分析】EXPMA四色均线指标优化版