日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一文看懂HTTPS、证书机构(CA)、证书、数字签名、私钥、公钥

發(fā)布時(shí)間:2023/12/14 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一文看懂HTTPS、证书机构(CA)、证书、数字签名、私钥、公钥 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

君問歸期未有期


說到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)才能保證信息的安全:

  • 信息的保密性
  • 信息的完整性
  • 身份識(shí)別
  • 信息的保密性(加密算法)

    信息的保密性我們可以使用對(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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。