從https的實現看數字證書、SSL、數字簽名、摘要算法、對稱/非對稱加密

https
https全稱Hyper Text Transfer Protocol over Secure Socket Layer,簡短點說就是HTTP over SSL。從名詞看,他的意思是建立在SSL層之上的HTTP協議,也就是在傳輸層(TCP)協議和應用層HTTP協議之間加入了一個安全層,使得原本有意義的數據經過加密後傳輸,保障了用戶數據的安全。
HTTPS協議中,使用了SSL傳輸層和數字證書,從而實現了以下兩個功能:
1、由於使用了SSL,建立了信息傳輸的安全通道,保障了數據的安全,使得客戶端和服務端之間可以傳輸一些敏感信息,如銀行交易信息。
2、由於HTTPS協議要求服務器提供數字證書,通過數字證書可以確認網站的真實性,使用了HTTPS的網站,用戶會在地址欄中看到一把鎖,可以查看網站的認證信息。這裏涉及到數字證書的使用原理,下面會詳細介紹。
針對上述兩個功能,HTTPS採用了以下邏輯進行實現:
1、認證網站的真實性:用戶打開HTTPS支持的網站時,服務器向用戶提供數字證書。證書上記錄了服務器的身份信息,以及後續SSL層需要使用的密鑰的公鑰,證書上的信息經認證機構通過數字簽名的手段標識,瀏覽器中提前有安裝認證機構的根證書,這個證書可以用來驗證服務器發來證書的簽名的真實性。
2、客戶端得到網站的公鑰:該公鑰同時放在數字證書中,客戶端在獲取證書的同時獲取到公鑰,同時保證了公鑰的真實性。由該公鑰加密的數據只有服務器的私鑰可以解讀,保障了數據傳輸的安全。
3、客戶端隨機生成一個密鑰,用於後續頁面數據傳輸時的加密,通過上一步的公鑰加密後發給服務器。(這一步需要詳細說明一下:A、注意這裏產生的密鑰是一個對稱加密的密鑰,和服務器提供的公鑰原理不同,服務器的公鑰的在傳完這個密鑰之後,就基本功成身退了。B、SSL實際操作過程中,客戶端發送給服務器的不是完整的密鑰,完整的密鑰是客戶端服務器根據這個密鑰組裝出來的。)
4、通過上一步雙方約定了密鑰,開始使用密鑰加密傳輸。
以上幾個步驟中,使用了多種安全技術,下面會一一解釋,主要有:
1、數字證書的概念和實現原理,爲什麼數字證書可以被上一級證書認證,這裏涉及數字簽名。數字簽名的實現又涉及摘要算法和非對稱加密。
2、爲什麼第二步中,使用網站提供的公鑰進行加密後,只有網站的私鑰可以解密,這裏涉及非對稱加密。
3、爲什麼第三步中,又生成了一個密鑰來進行加密,爲什麼不直接使用公鑰?這裏涉及對稱加密與非對稱加密的原理和效率。

作爲上面每一個環節都涉及到的重點,我們先看一下加密算法。
非對稱加密與對稱加密:
對稱加密加密與解密用的是同樣的密鑰,是最快速、最簡單的一種加密方式。但對稱加密有以下幾個問題:
1、任意一端加密的密鑰一旦泄露,則整個加密就失去了安全性。
2、加密的密鑰自身的傳輸面臨安全問題。
非對稱加密使用了一對密鑰,公鑰(public key)和私鑰(private key)。私鑰只能由一方安全保管,不能外泄,而公鑰則可以發給任何請求它的人。相比對稱加密,他由於使用了一對密鑰,其中私鑰是從不外泄的因此有以下優勢:
1、因爲私鑰不需要傳輸,泄露的可能性極小。
2、公鑰本身可以公開傳輸,因此不存在泄露和安全問題。
但也存在一些不足,主要是加密效率上,相比對稱加密需要更大的計算成本和時間成本。
對稱加密和非對稱加密配合使用,爲現在網絡安全傳輸提供了很好的解決方案。
1、每次建立連接時,生成對稱加密的密鑰。
2、使用非對稱加密對密鑰進行加密後傳輸,客戶端和服務器進行密鑰同步。
3、客戶端和服務器端使用對稱加密傳輸實際數據。
由於對稱加密的密鑰每次連接都不一樣,是的泄露的風險大大降低,同時又保障了數據傳輸的安全性。SSL便是建立在對稱加密和非對稱加密配合使用的基礎上的。
而在https的整個連接建立的過程中,客戶端通過獲取服務器端的證書獲得了服務器的公鑰,進行傳輸。

SSL
SSL是建立在TCP層和HTTP層之間的一層安全協議,在客戶端與服務器間傳輸的數據是通過使用對稱算法(如 DES 或 RC4)進行加密的。公用密鑰算法(通常爲 RSA)是用來獲得加密密鑰交換和數字簽名的,此算法使用服務器的SSL數字證書中的公用密鑰。有了服務器的SSL數字證書,客戶端也可以驗證服務器的身份。
SSL的實現邏輯在上面講到對稱和非對稱加密時已經提到。SSL的建立過程如下:
1、客戶端發出請求
2、服務端發送證書
3、客戶端認證證書
4、客戶端生成密鑰,加密併發送
5、雙發確認密鑰已同步,開始交換數據
其中,服務器端可以選擇性要求客戶端發送證書,客戶端則強制要求服務器端發送證書。

上面我們不斷提到數字證書,那麼數字證書到底是什麼?
數字證書可以理解爲網絡上使用的電子身份證,上面記錄了某個主體的信息(比如某網站),通過CA機構數字簽名的手段進行了認證。同時,數字證書上記錄着一份公鑰,這份公鑰對於的私鑰只有證書的持有着擁有。
1、證書上的數字簽名證明了證書的真實性。
2、持有證書上公鑰對於的私鑰,則實際持有了該證書,可以解密該證書加密的內容。

數字簽名是怎麼回事,真實性又是怎麼保證的呢:
我們從非對稱加密中可以發現,私鑰的擁有者是唯一的。那麼用私鑰加密的內容,可以認爲只有擁有者可以提供。假設我們知道一個公鑰,用它解密出來的內容則一定是私鑰的擁有者所加密的,也就是說,這個內容一定是私鑰擁有者產生的。那麼只要能證明公鑰的持有者,就可以證明一封數字內容的持有者了。
“用私鑰簽名,用公鑰認證”。這就滿足了一個“簽名”被簽署和被認證的基本邏輯。
那麼是不是要對證書上所有的內容全部用私鑰加密來達到簽名的效果呢。實際這麼做的話,加密成本就太高了。
我們的數字簽名實際也不是這麼做的,我們需要對需要被簽名的內容進行精簡,並對精簡後的內容進行私鑰加密就可以形成簽名了,這個精簡的過程我們稱爲“摘要”。這裏的這個摘要需要滿足以下原則:只要被摘要的內容不一樣,則摘要一定不一樣。這樣一來,證書的內容只需要明文保存,同時進行摘要後用私鑰加密形成簽名。當我們需要驗證證書是,用同樣的摘要算法進行摘要,並對簽名進行解密,兩者一對比,如果一樣,說明證書的內容沒被改動過。
這個摘要並加密的過程,就是數字簽名。這裏我們用到了摘要算法,被摘要出來的內容具有固定的長度。

知道了怎麼簽名,還有一個問題,怎麼證明簽名的人是權威機構呢?同樣的,簽名方也需要提供一個自己的數字證書,上面記錄着他的信息,其中包含他的上級簽名和公鑰。這份公鑰就是我們用來驗證他的簽名的。而他的證書上的上級簽名,則又是他的上級證書的私鑰簽署的。所以證書與他的上級之間,就形成了一個相互證明的鏈。這個鏈條的最頂端,是一份叫做根證書的證書,根證書沒有被簽名,我們通過安裝根證書來表示對他的信任。

到這裏,我們從https出發,介紹了一遍網絡安全中的幾個概念。對於每一種方法都有不同的實現,下面進行簡單羅列:
1、摘要算法:MD5,SHA-1等
2、對稱加密:DES,3DES,AES等
3、非對稱加密:RSA等







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章