SSL根證書里的公鑰為什麼是密文?

根證書里存放的是CA的公鑰,用於驗證證書的真偽,問題來了,我看了下根證書的公鑰也是用了RSA加密的,如果是用CA私鑰加密的,那怎麼解密呢(解密用的公鑰被加密了)?


數字證書到底是幹嘛的?

在回答這個問題之前,先來回顧一下在現實生活中如何證明你就是你?

身份證可以證明你自己嗎?在一定程度上可以,如果這個世界上有人和你長得非常相似(肉眼辨別不出),盜竊你合法身份證,完全可以矇混過關,那麼你就被假冒了,所以單純依靠肉眼的識別是有風險的。

唯一性
但是人類的指紋、瞳孔、DNA卻是唯一的,換句話說,這個世界沒有兩個人這些生物信息是完全匹配的,基於這個事實,如果在身份證的晶元里寫入持有人的指紋信息,且無法更改(防寫),那麼當持有人出示身份證時,同時驗證指紋信息,當存儲的指紋與採樣的指紋完全匹配時,認證通過,你就是你!

RSA演算法(公鑰演算法)
基於RSA演算法的數字證書,權威的CA公司,利用RSA演算法,生成一對(私鑰,公鑰),好比公老虎、母老虎的關係,具有唯一的對應關係:

私鑰加密的數據,公鑰可以解密;
公鑰加密的數據,私鑰可以解密;

私鑰只有CA公司知道,其他任何人、任何機構都不會知道,如果你擁有該CA公司的合法公鑰,並且你能夠解密對方的數據,很顯然對方是使用CA私鑰加密的,既然只有CA公司唯一知道私鑰,那麼對方就是CA公司無疑,只有真正讀懂了這段話,才能繼續看。

數字證書
CA公司的公鑰以何種格式分發給每台電腦呢?
用自簽名的方式,生成數字證書,一般格式:

誰是簽發者:自己嘍
公鑰:1024/2048位公鑰(明文)
有效期:xx
哈希演算法:將公鑰生成哈希
加密演算法:將哈希用私鑰加密,生成指紋
指紋:見上

又是如何安全可靠的分發出去的?
Windows操作系統預裝

當你拿到一台嶄新的電腦時,其實已經擁有了各大權威CA公司的自簽名數字證書,也稱為根證書,我一般稱為公鑰,因為只有公鑰是真正幹活的!

當你訪問某台HTTPS伺服器時,TLS連接過程中,對方出示了某CA公司的數字證書鏈,先從根證書開始層層校驗,由於你已經擁有CA的公鑰,可以解密對方指紋,你可以認證對方是真正的CA,既然CA合法,CA簽發的第三方也是合法的,進而完成認證,完成TLS協商。

所以題主所說的加密,只是指紋,而不是公鑰。


怎麼可能公鑰是密文,頭一回聽說

另外,公私鑰在證書應用中,是做簽名的,保護完整性而不是保護機密性。雖然rsa演算法中是用了私鑰加密的方法做簽名、做完整性保護。

很多做簽名演算法都不是直接用私鑰加密的


公鑰是明文的。你所謂的密文很可能是指的「簽名」。

簽名的過程是CA對伺服器的公鑰進行確認後使用自己私鑰計算出一段校驗的值(簽名),客戶端拿到這個簽名後,可以用它的公鑰進行驗證,確認是不是合法的。

另外,一般HTTPS握手過程中也不會出示CA的公鑰,因為CA一般內置在操作系統(瀏覽器)中了,大部分情況下只會出示伺服器的公鑰(簽名後的證書)、中級證書。中級證書的簽發者一般是CA,就能直接從系統(瀏覽器)中讀取到了。

詳情可見 HTTPS自建CA及自簽名證書不完全指南(理論篇)


你要解密這個密文, 就必須要更上一級的證書的公鑰去解密, 直至根證書, 這樣保證了信任的關係鏈。


因為你看錯了,證書就是用來告訴別人自己的公鑰的,不可能加密。要不然你把那個證書發出來讓大家鑒賞一下。


推薦閱讀:

有哪些方法查到網站真實ip?(網站用了CDN)?
域名的SSL證書泄漏對網站的安全性影響大嗎?
https以及cookie的問題?
登錄知乎時,賬號密碼是明文傳送的,安全嗎?
安全套接層有什麼用?

TAG:網路安全 | SSL | HTTPS | 數字證書 |