數字證書工作原理


參考了很多文章,一些圖片,直接拷貝別人的。

SSL證書和HTTPS的關係

HTTPS在HTTP的基礎上加入了SSL加密協議,HTTP是明文傳輸,HTTPS是加密傳輸。

如何得到一張證書
數字證書的創建流程:
//help.aliyun.com/document_detail/211100.html
可以通過阿里雲SSL證書服務購買SSL證書,並向CA中心提交證書申請,直到證書成功簽發;您將已簽發的證書安裝到Web伺服器後,則Web服務將會通過HTTPS加密協議來傳輸數據。
HTTPS加密傳輸協議可激活客戶端瀏覽器到網站伺服器之間的SSL加密通道(SSL協議),從而實現高強度雙向加密傳輸,防止傳輸數據被泄露或篡改。

安全作用
數字簽名的作用是防中間人偽造、篡改;
SSL數字證書的作用是證明發件人是誰,保證收到的公鑰是官方發給我的,不是被中間人篡改過的。


SSL數字證書為什麼會安全?

用SSL與不用SSL證書的區別:

  • 防中間人劫持,獲取明文數據;
  • 瀏覽器能驗證伺服器身份,區分官網或釣魚網站;
  • 防中間人篡改,必要時,伺服器還可以驗證訪客身份(可選 );

SSL證書怎麼做到上面3個功能的?
請看數字證書籤發、驗簽流程


數字證書籤發、驗簽流程

前提一定要理解數字簽名的流程.

數字證書就是給公鑰做的數字簽名,為什麼需要給公鑰做數字簽名?
格式
X.509是RFC5280定義的一種公鑰證書格式(public key certificate)。
X.509證書也被稱為數字Digital Certificate。
一張X.509包含一個Public Key和一個身份資訊。X.509證書要麼是自簽發,要麼是被CA簽發。

把版本、發行方、過期時間、域名、公鑰、證書籤名等資訊 合成在一個文件內,就叫數字證書。
裡面的資訊,根據標準格式存入,也可以根據標準格式取出。

自簽發就是系統根證書
根證書,在系統安裝初始化時,就會從CA機構導入進來。

CA簽發,就是你申請證書的時,把你的資訊塊提交給CA,CA用他的RSA密鑰給你資訊塊加密,
得到一個:Certificate Signature , CA的證書也會在你電腦里保存著,
這樣你通過他的公鑰就能解密Certificate Signature 得到H2(哈希值),
可以做對比,來判斷是否篡改過。

簡化版的簽發、驗收流程

CA 簽發證書的過程,如上圖左邊部分:

  • 首先 CA 會把持有者的公鑰、用途、頒發者、有效時間等資訊打成一個包,然後對這些資訊進行 Hash 計算,得到一個 Hash 值;
  • 然後 CA 會使用自己的私鑰將該 Hash 值加密,生成 Certificate Signature,也就是 CA 對證書做了簽名;
  • 最後將 Certificate Signature 添加在文件證書上,形成數字證書;
    客戶端校驗服務端的數字證書的過程,如上圖右邊部分:
  • 首先客戶端會使用同樣的 Hash 演算法獲取該證書的 Hash 值 H1;
  • 通常瀏覽器和作業系統中集成了 CA 的公鑰資訊,瀏覽器收到證書後可以使用 CA 的公鑰解密 Certificate Signature 內容,得到一個 Hash 值 H2 ;
  • 最後比較 H1 和 H2,如果值相同,則為可信賴的證書,否則則認為證書不可信。

證書鏈
但事實上,證書的驗證過程中還存在一個證書信任鏈的問題,因為我們向 CA 申請的證書一般不是根證書籤發的,而是由中間證書籤發的,比如百度的證書,從下圖你可以看到,證書的層級有三級:

我自己畫了一下簡圖:

H2由上一級給你生成,在你提交資訊給CA的時候,CA用他的私鑰和你資訊摘要生成H2.


reference

數字簽名、數字證書與HTTPS是什麼關係?
//www.zhihu.com/question/52493697

一文徹底搞懂加密、數字簽名和數字證書!
//segmentfault.com/a/1190000024523772

瀏覽器如何驗證HTTPS證書的合法性?
//www.zhihu.com/question/37370216

手工驗證一張數字證書的有效性
//blog.yuantops.com/tech/validate_a_digital_certificate_step_by_step/
瀏覽器驗證SSL數字證書的步驟
//blog.yuantops.com/tech/how_do_web_broswer_validate_ssl_certificates/