SSL及其加密通信過程
什么是SSL
SSL英文全稱Secure Socket Layer,安全套接層,是一種為網絡通信提供安全以及數據完整性的安全協議,它在傳輸層對網絡進行加密。它主要是分為兩層:
- SSL記錄協議:為高層協議提供安全封裝、壓縮、加密等基本功能
- SSL握手協議:用於在數據傳輸開始前進行通信雙方的身份驗證、加密算法的協商、交換密鑰
OpenSSL是SSL的開源實現,它是作為密碼學的安全開發包,提供相當強大全面的功能,囊括了主要的密碼算法、常用的密鑰和證書封裝管理功能以及SSL協議,並提供了豐富的應用程序供測試或其它目的使用。它一共提供了8中對稱加密算法和4中非對稱加密算法。
HTTPS和SSL
HTTP(Hyper TEXT Transfer Protocol超文本傳輸協議)是目前互聯網上應用最為廣泛的一種網絡協議,用於在Web瀏覽器和網站服務器之間傳遞信息,但是HTTP協議以明文的方式發送內容,不提供任何數據加密,攻擊者能夠很輕易通過抓包的方式截取傳輸內容並讀懂其中的信息,所以HTTP不適合傳輸一些比較私密的信息,為了解決HTTP這一缺陷,HTTPS(Hyper TEXT Transfer Protocol over Secure Socket Layer)協議出現。HTTPS是在HTTP的基礎上加入SSL協議。傳輸以密文傳輸,保證數據傳輸的安全以及確認網站的真實性(數字證書)。
HTTPS=HTTP+SSL
SSL加密方式
對稱加密與非對稱加密
在開始之前首先得對理解對稱加密與非對稱加密這兩種加密方式。其中加密過程是: 信息+密鑰+算法=密文
對稱加密
對稱加密實質加密和解密都使用同一個密鑰,對稱加密只有一個密鑰,作為私鑰。這就好比現實生活中的鑰匙和鎖,我將想要傳達的信息通過對稱加密算法用私鑰進行加密,形成密文,然后將這密文傳送給同樣擁有這把鎖的“鑰匙”的人,對方就用同樣的算法和私鑰將密文解密出來。
常用的對稱加密算法有DES和AES等
但是在現實中,這種傳輸方式並不是特別方便,密鑰怎么給對方是一個很關鍵的問題,而且密鑰交給了其他人自己也不是很放心。於是非對稱加密出現
非對稱加密
非對稱加密是指加密和解密用的是不同密鑰,並且是成對存在的。一把稱為公鑰,能夠放心的交給別人,一把是私鑰,只能自己保存。其中用公鑰加密的信息只能用私鑰解密,用私鑰加密的信息只能用公鑰解密。
需要注意的是這里的私鑰和密鑰都是對應的,就是說我的私鑰可以解密用我的公鑰加密的信息,但是他人的私鑰不能解密用我的公鑰加密的信息。
常用的非對稱加密算法有:RSA,DH,DSA三種
具體的加密過程
我通過一段具體的通信過程來模擬這一加密過程。假設主人公是客戶端A和服務端B
A:B,你好,我想向你發一段消息,請你把你的公鑰給我 B:好的,我的公鑰是:xxxxxxx。 A:好的,我收到了你的公鑰,我給你發送的消息經過你的公鑰加密后是:yyyyyyy。 B:收到,我現在用我的密鑰來解密看看。
這就是非對稱加密的具體過程,這種方式看上去很安全,但是仔細想想信息真的可靠嗎?
想一想客戶端A的公鑰是假的怎么辦?如果有一個黑客C也給客戶端A發送了一個自己的公鑰,而客戶端A不知道公鑰的正確性,用了C的公鑰加密發送,這樣一來,信息被C截取的化,信息不久泄露了嗎。
所以我們得想個辦法證明我用的公鑰確實是服務端B的公鑰。
於是數字證書出現!
我先拋一段官方的數字證書的概念
數字證書就是互聯網通訊中標志通訊各方身份信息的一串數字,提供了一種在Internet上驗證通信實體身份的方式,數字證書不是數字身份證,而是身份認證機構蓋在數字身份證上的一個章或印(或者說加在數字身份證上的一個簽名)。
簡單來說數字證書就是一段信息,他內部的信息包括:
- 簽發證書的機構
- 加密算法
- Hash算法
- 公鑰
- 證書到期時間等
貼一段實際的數字證書
我通過查看CSDN的數字證書來幫助理解這一概念,chrome的網頁欄一般有“安全”的字樣,說明該網站的有數字證書的,數據傳輸的安全性是可以保證的。
再來看看數字證書的內容
它里面包含了一系列安全相關信息,在下面我會講這些信息的用途。
另外提一點,數字證書是由權威機構——CA機構發行,我們是絕對信任這個機構的。
為了防止證書頒發的過程中被人修改,又出現了一個數字簽名的概念,所謂數字簽名就是把證書內容做了一個hash操作生成固定長度的數據發送給服務端B,服務端就能通過自己hash一遍對比發過來的hash來判斷內容是否被修改。然而這還是可能被人截取修改內容重新生成hash再發給服務端B,這怎么辦呢?出於這個考慮,CA機構在頒發時又會用一個私鑰將這個hash加密,這樣就防止了證書被修改了。
我將該過程圖示
這里再說一下數字簽名,通俗來說就是將要傳輸的信息通過hash加密后將這個hash用私鑰加密,最后得到的東西稱之為數字簽名。用來驗證傳輸的信息是否被更改,注意的是這個私鑰是CA官方私鑰。
所以最終傳送的內容有: 正文+數字簽名+數字證書
我們梳理一下
- 第一步 :客戶端A開啟一個新的瀏覽器訪問客戶端時,會先讓A安裝一個數字證書,這個證書主要包含的是CA機構的公鑰。
- 第二步:服務端B發來CA機構給自己的證書,通過CA公鑰解密被CA私鑰加密的hash1,然后再用B的證書里面的hash算法將信息生成一個hash2,通過比較兩個hash,若相等,確認這個數字證書是服務端B的。
由於非對稱加密算法復雜度和計算量大,對稱加密效率高,SSL就將這兩種加密算法混合着用,這樣安全和效率就都能保證了。其中具體的過程如下:
- 第一步 客戶端A給出 支持的SSL版本+一個隨機數+自己支持的加密方式
- 第二步 服務端B接收到這些信息后確認加密方式+自己的安全證書+一個隨機數發給A
- 第三步 客戶端A確認數字證書有效性(驗證方法上面已經說明),然后生成一個隨機數,並將這個隨機數用B的數字證書公鑰加密后發送給A。
- 第四步 服務端B使用自己的私鑰解密這個隨機數
- 第五步 A和B通過第二步確定的加密方法將前三個隨機數生成一個對話密鑰 用來接下來的通信(個人感覺不需要三個隨機數,只用最后一個就夠了,這樣做可能是為了更安全)
於是A和B救恩那個用對稱加密的方式快速有效安全的通信了。
這就是SSL協議的握手過程,圖示如下。
總結
本文由https引出SSL,並探討對稱和非對稱加密以及數字簽名和數字證書的原理,最后介紹SSL具體加密通信過程。若有錯誤或者改進之處歡迎指正,不勝感激。
---------------------
作者:Jxhacker
來源:CSDN
原文:https://blog.csdn.net/qq_40149612/article/details/82795656
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!