數字證書原理

2021-09-10 12:00:22 字數 3003 閱讀 7069

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

為什麼會有證書這個概念呢?

主要是在非對稱加密中,客戶端需要獲取服務端的公鑰資訊,但是如果請求被第三方攔截的話,公鑰資訊就可能被替換,會導致客戶端用第三方的公鑰進行加密,互動資訊存在洩露的風險(誰也不想自己的銀行卡密碼被洩露)。因此,引入證書,用於鑑別服務端的身份。如果服務端的身份鑑定失敗,那麼就終止請求。

那麼證書的原理是什麼呢?

證書頒發給使用者後,使用者就會拿著證書到處證明自己的身份。如果我們收到了乙個這樣的證書,怎麼才能判斷這個證書就是合法的,不是偽造的呢?證書中儲存的有簽名資訊,假設互動的雙方是a和b。a收到了b發過來的證書,想要驗證這個證書的真偽,通過如下步驟:

1. a首先需要獲取到為b頒發證書的那個ca的公鑰,用這個公鑰解密證書中的簽名,得到摘要資訊1

2. a使用證書中簽名演算法裡面的hash演算法對證書進行hash計算,得到乙個摘要資訊2。

3. a將摘要資訊1和摘要資訊2進行對比,如果兩者一致,就說明證書確實是由這個ca頒發的(能用ca的公鑰解密說明該ca確實持有私鑰),並且沒有被篡改過,該證書沒有問題。

當然,也會同時檢查證書是否在有效期內。

上述過程存在兩個問題:

1. ca的公鑰如何獲取

2. 如何驗證ca的證書是否被篡改及身份

對於問題1:b的證書中含有為b頒發證書的ca的資訊,a通過該資訊請求ca的證書,ca的證書中含有ca的公鑰。

對於問題2:驗證ca證書是否被篡改及ca的身份和a驗證b的證書和身份的原理一樣,首先通過摘要資訊進行判斷,然後找為ca頒發證書的上層ca,通過這種一層一層的方式驗證身份。那麼,什麼時候這個驗證過程才會停止呢?直到找到乙個可信的ca或者驗證出現了錯誤。作業系統中一般都會安裝一些根證書,在進行身份驗證的時候,如果在作業系統的根證書中驗證了ca的身份,那麼驗證過程就可以終止了。

a使用ca的證書驗證b的證書的過程如下圖所示。

如果通訊雙方要互相驗證對方的證書,那就要分別獲取到為對方頒發證書的ca的證書。如下圖所示,a如果要驗證b的證書,則a必須先獲取為b頒發證書的ca的證書,用ca的證書驗證b的證書;b如果要驗證a的證書,則b必須先獲取為a頒發證書的ca的證書,用ca的證書驗證a的證書。如果a和b是由同乙個ca頒發的證書,那麼兩者獲取到的ca的證書是相同的,如果a和b是由兩個不同的ca頒發的證書,那麼兩者獲取到的ca的證書是不同的。

證書屬性

公鑰是通過證書來向外界公開分發的,證書中必然會含有持有者的公鑰資訊。x.509 v3規範的證書格式中包含的關鍵資訊如下:

l  簽名演算法:生成該證書的簽名時所使用的hash密碼學演算法和公鑰密碼學演算法。

2  頒發者:誰頒發了這個證書,即ca的名稱(驗證者通過該字段去獲取ca的證書)

3  主題:該證書時頒發給誰的,即證書持有者的名稱。

4  公鑰資訊:證書持有者的公鑰資訊。

5  簽名:ca對該證書的簽名,又叫做ca的指紋資訊。

證書頒發

ca頒發證書的過程如下圖所示:

首先,ca使用簽名演算法中的hash密碼學演算法(如sha1)生成證書的摘要資訊,然後使用簽名演算法中的公鑰密碼學演算法(如rsa),配合ca自己的私鑰對摘要資訊進行加密,最終形成簽名。

證書頒發方式

1. 先在裝置上生成公私秘鑰對,然後將公鑰資訊及裝置資訊提供給ca,ca根據這些資訊生成證書

2. ca直接為裝置生成公私秘鑰對,然後為裝置生成證書,最後將生成的公私秘鑰對及證書匯入裝置中

常見的證書儲存格式如下表所示:

der二進位制編碼,字尾名.der/.cer/.crt

不包含私鑰

pembase 64編碼,字尾名.pem/.cer/.crt

不包含私鑰

pkcs #12

pkcs編碼,字尾名.p12

包含私鑰

注意:公私金鑰對必須成對出現才能保證公鑰金鑰學正常運轉,所以如果ca同時為裝置生成了公私金鑰對和證書,就需要將公私金鑰對(主要是其中的私鑰)和證書同時頒發給裝置,頒發時需要根據不同情況選擇證書的儲存格式。例如,頒發給pc時就要選擇pkcs #12格式,將私鑰和證書同時頒發;頒發給防火牆時,因為防火牆只支援der/pem格式,所以要選擇der/pem,同時還必須將公私金鑰對以單獨檔案的形式頒發給防火牆。

總結一下證書的使用方法:

1、通訊雙方各自持有自己的證書,當一方需要向另一方證明身份時,就把自己的證書傳送過去。雙方不用事先儲存對方的證書,只在驗證時接收對方傳送過來的證書即可。

2、一方驗證另一方證書的真偽時,必須事先獲取到為另一方頒發證書的ca的證書,用這個ca證書來驗證對方的證書。

注意:因為不同的ca會頒發不同證書,所以在證書的世界中,每個人可能會持有多個證書。同理,每個人也會獲取到多個不同的ca證書。在這種情況下,一方收到另一方發過來的證書時,會根據證書中頒發者的名稱,在自己的系統中查詢對應的ca證書,找到後就用這個ca證書來驗證。如果沒有找到,那就說明事先沒有獲取到ca證書,也就無法判斷對方傳送過來的證書的真偽。

通過openssl或者cryptopp加密庫均可以簽名,生成證書。

參考資料

《華為防火牆技術漫談》

數字證書原理

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

數字證書原理(1)

對原文做出部分修改 一 基礎知識 1.1 數字加密 不使用金鑰 如下圖所示,明文進行一次加密,生成密文,再由解碼器解碼 編碼器演算法為 旋轉3個字元 a d,c f.使用金鑰 編碼演算法和編碼機可能落入敵人手裡,所以大部分編碼機上使用 號盤,使用不同的值進行加密 演算法為 旋轉n個字元 金鑰為n n...

數字證書的原理

先說加密。明文p,加上密碼w一混淆之後,變成密文m 如果不知道w,則無法從m反推回p。也就是無法進行解密。類似這種加密方式,稱為對稱加密。也就是加密 解密使用的密碼是一樣的。實際上加解密並不是直接使用密碼,而是經由密碼生成的金鑰。這種演算法有很多,比如aes。另外還有一種神奇的加解密演算法,叫做非對...