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