1. 程式人生 > >非對稱加密、ssl和tls的工作原理

非對稱加密、ssl和tls的工作原理

假設網際網路上的A和B要進行安全的通訊,為了防止訊息被別人截獲以及篡改,它們會使用一個共同的暗號來對要傳送的訊息及接受的訊息進行加密解密,這也就是大家經常提到的對稱加密機制,其中暗號與諜戰中的密碼本大同小異。

對稱加密似乎完美的解決了安全通訊的問題,前提是通訊的暗號或密碼不被別人知道。

但該方法存在一個致命的問題:如何確定一個雙方都同意的暗號?我們無法在一個不安全的通道傳送一個私密的資料。

為此,有人提出了非對稱加密方法(如RSA加密演算法)。非對稱機制下,每個使用者包含兩個key:public key和private key。公鑰是給大家用的,可以通過網站、email供別人使用的;私鑰就是自己的,必須小心儲存。用公鑰加密的內容只能用對應的私鑰進行解密,反之亦然。

基於非對稱加密我們可以實現數字簽名,例如訊息的傳送者用他自己的私鑰進行訊息的加密,接受者用傳送者的公鑰對接收到的訊息進行解密,從而實現不可否認性。

由於非對稱加密方法一般都比較慢,效能較差,實際使用中也僅僅是用它確定一個雙方要使用的暗號(也就是對稱加密密碼),此後的通訊都還是基於對稱加密機制。

同樣的,非對稱加密也涉及一個問題:公鑰的釋出和交換問題。如何去確定及驗證一個資訊釋出者公鑰的合法性。

為此,人們提出了CA(授權中心)的概念,授權中心會發行一個個的證書,每個證書本質上包含:實體或個人的名字以及對應的公鑰。為了保證證書的安全性,授權中心用自己的私鑰對證書進行加密,證書接受者用授權中心的公鑰對該證書進行解密,從而實現證書的數字簽名。

證書解密後,就可以拿到實體或個人的公鑰了。

仔細考慮,這裡還是有問題,如何去確定授權中心的公鑰????

實際中,瀏覽器或作業系統會預先包含一些授權中心的公鑰,從而解決該問題。

接下來,看看ssl工作的具體流程:

(1)訪問一個https開頭的網站時,瀏覽器和伺服器首先會採用ssl建立一個安全通道。

(2)瀏覽器傳送ssl的版本以及它可支援的對稱加密演算法,伺服器基於這些資訊會返回一個此次通訊要使用的ssl版本、具體的加密演算法以及該伺服器的證書(包含了伺服器的域名和公鑰)

(3)瀏覽器採用對應授權中心的公鑰檢查該證書是否有效、有沒有過期等。

(4)如果證書有效,瀏覽器生成一個本次會話要使用的對稱加密密碼,採用伺服器的公鑰加密,然後傳送。

(5)此後,基於該生成的密碼,瀏覽器和伺服器就可以進行安全的通訊了。