https

http(對稱加密):數據傳輸必須要有密碼,所以服務器生成了一個密碼,用于數據的加密和解密,可是現在只有服務器知道,所以也要告訴客戶端這個密碼是多少;那么問題來了,如果密碼傳輸過程中被截獲怎么辦?

那么就采用非對稱加密,這樣客戶端用公鑰加密,服務器用私鑰解密就行了,而黑客只有私鑰而沒有公鑰,所以什么都做不了,哈哈。但是如果黑客又想了一招,攔截服務器發送的公鑰而換成自己提供的公鑰,這樣加密之后,黑客用自己提供的公鑰對應的私鑰來解密。這樣,接下來黑客就成了服務器,你的所有信息都送到了黑客手里,天哪。。

所以就要驗證,對方是不是服務器。權威機構CA提供了證書。所以對方就要發送自己的證書給客戶端來進行驗證。所以重點就是這個證書能不能證明自己就是服務器而不是黑客,那么這個證書是什么原理來驗證“我”就是服務器。

證書包括信息:證書的公鑰,頒發機構,頒發給的機構,這些都是明文信息,我們稱為內容P。

然后使用hash算法,對內容P進行hash計數,得到一個hash值H。

然后使用簽發機構的私鑰對H進行RSA加密,得到簽名信息S。

然后將P,S連成一個文件,這個文件就是所謂的數字證書了。現在假設某人得到了這個證書,如何確認這個證書屬于誰的呢?

我們看數字證書里有些什么?可以得到P,可以得到S。

我們用同樣的hash算法對P進行hash計數,得到一個hash值H1.

P里有公鑰,簽發者ID,Subject,有效期,及其他信息。我們用公鑰解密S,得到了一個值H’。

這個H‘就是制作數字證書的時候,用私鑰對S加密的H。

現在對比H’和H1是否相等,如果不相等,就說明:1.內容P被篡改過,或者2.證書不是由CA簽發的。

反之則證明了這個公鑰就是服務器提供的。如果是服務器提供的,便可以用這個公鑰對接下來客戶端生成的隨機數(也就是之后數據的加密解密的密碼)進行加密。

此時,可靠的通信就以建立,可以安全的進行數據傳輸。

那為什么會出現瀏覽器警告用戶,說這個網站提供的證書不安全,那是因為這個證書是第三方簽發的,但這個第三方卻不權威。瀏覽器就只認權威CA,只存了CA提供的證書的共鑰。連公鑰都沒有,所以連內容P的驗證都無法進行,更不用說驗證S了,所以當然就是不能被信任的。

其中一部分引自知乎問題的一個答案:數字證書的原理

more:關于12306,參見12306的證書問題

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容