HTTPS的數字證書驗證原理

2021-08-31 07:37:59 字數 3904 閱讀 6773

網路請求方式通常分為兩種,分別是http請求和https請求,其中http的傳輸屬於明文傳輸,在傳輸的過程中容易被人擷取並且**其中的內容,而https是一種在http的基礎上加了ssl/tls層(安全套接層)的安全的超文字傳輸協議,其傳輸的內容是通過加密得到的,所以說是一種安全的傳輸

說到加密演算法,先來了解一下兩種常用的加密方式,分別是對稱加密和非對稱加密:

1.對稱加密:加密使用的秘鑰和解密使用的秘鑰是相同的,也就是說加密和解密都使用同乙個秘鑰,加密演算法是公開的,秘鑰是加密者和解密者絕對保密的

2.非對稱加密:加密使用的秘鑰和解密使用的秘鑰是不相同的,https在數字證書驗證的時候,採用的rsa密碼體制就是一種非對稱加密

rsa是一種公鑰密碼體制,現在使用非常廣泛,這個密碼體制分為三部分,公鑰、私鑰、加密演算法,其中公鑰和加密演算法是公布的,私鑰是自己保密的。這種機制最大的特點是,通過公鑰加密的密文只有對應的私鑰才能解密,同樣通過私鑰加密的密文也只有對應的公鑰才能解密。下面我們將會講到https是如何通過rsa這種密碼體制去驗證身份的

數字證書是https實現安全傳輸的基礎,它是由權威的ca機構頒發的,證書的主要內容有:公鑰(public key)、issuer(證書的發布機構)、subject(證書持有者)、證書有效期、簽名演算法、指紋及指紋演算法

在網路中,要想實現自己的資料能夠安全地傳輸,就必須向權威的ca機構申請數字證書,有了數字證書就相當於有了一把安全秘鑰,這裡先認識一下證書是長啥樣的,之後再解析證書是如何進行安全認證的

下面是csdn部落格的證書內容:

可以看到公鑰是一串很長的2048 bits的字串,同時也可以看到《使用者》的內容包含了csdn.net**,在後面驗證url鏈結是否正確的時候用到,還有頒發者、有效期、簽名演算法等等。當然還有指紋及指紋演算法等其他內容,我們滾動到下面看看另乙個截圖

上面展示了csdn**的ca證書內容,頒發者是geotrust,它就是傳說中的權威的ca機構了。這裡特別說明一下,ca機構除了給別人頒發證書以外,它也有自己的證書,這個證書是機構自己頒發給自己的,為了區分我們稱它為根證書,根證書也有自己的公鑰和私鑰,在本文中我們稱之為根公鑰和根私鑰,根公鑰和加密演算法是對外公布的,而根私鑰是ca機構自己絕對保密的。這個根證書在驗證證書的過程中起著核心的作用

**可以看到機構的根證書呢?在瀏覽器中可以看到,開啟步驟:瀏覽器——工具——internet選項——內容——證書,開啟如下圖:

在受信任的根證書頒發機構中我們看到一系列的ca機構,如上面csdn的證書的頒發者geotrust機構也在其中,這些權威機構的根證書都是瀏覽器預先嵌入到其系統中的,點開看看geotrust的根證書,如圖

可以發現頒發者和使用者都是一樣的,其中裡面的公鑰就是根公鑰,在驗證數字證書的時候非常關鍵

在解析數字證書的驗證之前,先來解析一下什麼是指紋和數字簽名?

在上面的csdn的證書中可以看到有乙個叫指紋的字串,指紋可以理解為證書身份的唯一代表,是用來保證證書的完整性的,確保證書沒有被修改過。證書在發布之前,ca機構對證書的內容用指紋演算法(一般是sha1或sha256)計算得到乙個hash值,這個hash值就是指紋。為什麼用hash值作為證書的身份代表呢?首先,hash值具有不可逆性,也就是說無法通過hash值得出原來的資訊內容;其次,hash值具有唯一性,即hash計算可以保證不同的內容一定得到不同的hash值

簽名是在資訊後面加上的一段數字串,可以證明該資訊有沒有被修改過。數字證書在發布的時候,ca機構將證書的指紋和指紋演算法通過自己的私鑰加密得到的就是證書的簽名了

先簡單闡述一下證書的指紋和簽名的作用,我們在驗證證書的時候,首先通過機構的根公鑰去解密證書的簽名,解密成功的話會得到證書的指紋和指紋演算法,指紋是乙個hash值,它代表著證書的原始內容,此時再通過指紋演算法計算證書內容得到另外乙個hash值,如果這兩個hash值相同,則代表證書沒有被篡改過,否則就是被篡改了

下面基於乙個簡單的圖例,去分析https的數字證書的驗證過程

假設這是乙個瀏覽器的https請求

二:瀏覽器接收到證書以後,就要開始進行驗證工作了。首先從證書中得知證書的頒發機構,然後從瀏覽器系統中去尋找此頒發機構的根證書。上面我們也看到,世界上權威ca機構的根證書都是預先嵌入到瀏覽器中的,如果在瀏覽器系中沒有找到對應的根證書,就代表此機構不是受信任的,那麼就會警告無法確認證書的真假,比如以前開啟12360**就會提示,現在不會了

如果我們找到了證書頒發機構的根證書,那麼就從根證書中取得那個根公鑰,用根公鑰去解密此證書的數字簽名,成功解密的話就得到證書的指紋和指紋演算法,指紋是證書內容通過指紋演算法計算得到的乙個hash值,這裡我們稱之為h1,h1代表證書的原始內容;然後用指紋演算法對當前接收到的證書內容再進行一次hash計算得到另乙個值h2,h2則代表當前證書的內容,如果此時h1和h2是相等的,就代表證書沒有被修改過。如果證書被篡改過,h2和h1是不可能相同的,因為hash值具有唯一性,不同內容通過hash計算得到的值是不可能相同的

有人說假如證書上的指紋是不法分子偽造的,偽造是沒有用的,因為你偽造的指紋不可能用ca機構的根私鑰去加密(根私鑰是ca機構絕對保密的),偽造者只能拿自己的秘鑰去加密這個偽造的指紋,但當我們拿機構的根公鑰去解密偽造指紋的時候是不可能成功的(加密內容只能由一對公鑰私鑰解密)

在證書沒有被修改過的基礎上,再檢查證書上的使用者的url(比如csdn.net)和我們請求的url是否相等,如果相等,那麼就可以證明當前瀏覽器鏈結的**也是正確的,而不是一些釣魚網之類的

但如果瀏覽器的連線被某個中間人擷取了,中間人也可以發乙個由權威的ca機構頒發的證書給瀏覽器,然後也可以通過證書沒有被篡改的驗證,但是在證書沒有被篡改的前提下,通過對比證書上的url和我們請求的url是否相同,我們還是可以判斷當前證書是不是伺服器發的證書。可以這麼理解,因為url具有唯一性,所以中間人的證書的上的url和我們的證書的url是不可能相同的,如果中間人修改了自己證書上的url,那麼就通過不了證書沒有被篡改的驗證,所以中間人的證書也是欺騙不了我們的

到這裡我們認證了三點資訊:

1.證書是否為受信任的權威機構頒發的

2.證書是否被篡改

3.證書是否為伺服器發過來的,而不是第三方發的

首先隨機生成乙個字串s作為我們的秘鑰,然後通過證書公鑰加密成密文,將密文傳送給伺服器。因為此密文是用公鑰加密的,這是乙個非對稱加密,我們知道,這個密文只有私鑰的持有者才能進行解密,在這裡私鑰的持有者當然是伺服器了,所以說任何第三方擷取到密文也是沒用的,因為沒有對應的私鑰無法解密得到我們的密文

還有乙個關鍵步驟,傳送密文的時候也會對訊息內容進行簽名操作。簽名上面講解過,就是對密文內容進行hash計算得到的hash值再通過公鑰或私鑰加密得到的一段數字串,這個簽名和訊息內容一起傳送出去。接收方收到訊息以後,通過私鑰或公鑰解析出密文和簽名的hash值,同時也會對接收的訊息內容進行同樣的hash計算得到另乙個hash值,比對兩個hash值是否相同來判斷訊息有沒有被篡改過

四:通過了上面的步驟以後,此時客戶端和服務端都持有了對稱加密演算法的同乙個秘鑰,然後兄弟倆就可以愉快地安全通訊了

數字證書的驗證有兩個重要的步驟,第一是客戶端驗證伺服器發的數字證書有沒有被篡改,以及沒有被篡改的證書是否為伺服器發的證書,而不是任何第三方假冒伺服器發的證書;第二是客戶端將對稱加密演算法的秘鑰安全地傳送給伺服器。這兩步都完成以後,整個https的數字證書的驗證就算是成功了

好了,通過上面 的講解,相信我們已經掌握了https的數字證書驗證原理了

詳解HTTPS中數字證書驗證系統

關於瀏覽器驗證 數字證書的流程網上的資料一般講的都不是很清楚。在查閱了不少資料後終於搞清楚這部分。ca下發給 的證書都是乙個證書鏈,也就是一層一層的證書,從根證書開始,到下級ca,一層一層,最後一層就是 證書。瀏覽器收到伺服器傳送的證書後,需要驗證其真實性。而證書的簽名是通過簽名演算法和上級ca的私...

數字證書原理

概念介紹 對稱加密演算法 加密和解密使用同乙個金鑰。非對稱加密演算法 加密和解密使用的金鑰不是同乙個。典型的如rsa 公鑰加密演算法 擁有一對金鑰,公鑰和私鑰,用私鑰進行解密和數字簽名,用公鈅來進行加密及驗證簽名。encryption 加密 decryption 解密 asymmetric 非對稱 ...

數字證書原理

證書,也叫做數字證書,是網路世界中的 身份證 證書將持有者的身份資訊和公鑰關聯到一起,保證公鑰確實是這個證書持有者的,通過證書就可以確認持有者的身份。證書由權威的 公正的 可信任的第三方機構頒發,我們把證書的頒發機構稱為ca certificate authority 相當於現實生活中的公安局。為什...