一文帶你了解 SSL

2022.02.24

什麼是SSL 簡稱是SSL,全稱Secure Sockets Layer 安全套接字協議,一般我們在學習 SSL 的時候,都會和 TLS一起來學習的,為什麼呢?因為 SSL 和 TLS 都是為網絡通信提供安全及數據完整性的一種安全協議。TLS與SSL在傳輸層與應用層之間對網絡連接進行加密。 我們先看 SSL協議,然後在看 TLS協議。 SSL協議位於 TCP/IP 協議與各種應用層協議之間,為數據通訊提供安全支持。SSL 協議可分為兩層: SSL記錄協議(SSL Record Protocol): 它建立在可靠的傳輸協議(如TCP)之上,為高層協議提供數據封裝、壓縮、加密等基本功能的支持。 SSL握手協議(SSL Handshake Protocol): 它建立在SSL記錄協議之上,用於在實際的數據傳輸開始前,通訊雙方進行身份認證、協商加密算法、交換加密密鑰等。 要說 SSL 協議我們先來看看結構, SSL的體系結構中包含兩個協議子層,其中底層是 SSL記錄協議層(SSL Record Protocol Layer); 高層是SSL握手協議層(SSL HandShake Protocol Layer) SSL記錄協議層的作用是為高層協議提供基本的安全服務的,而SSL握手協議層是用於SSL管理信息的交換,允許應用協議傳送數據之間相互驗證,協商加密算法和生成密鑰的。 SSL的工作過程 SSL 的工作過程實際上是分為了兩個部分,一個是發送,而另一個就是接收,每個部分所處理的事情也是不一樣的,畢竟一個是發送一個是接收。 發送過程: (1)從上層接受要發送的數據(包括各種消息和數據); (2)對信息進行分段,分成若幹記錄; (3)使用指定的壓縮算法進行數據壓縮; (4)使用指定的MAC算法生成MAC; (5)使用指定的加密算法進行數據加密; (6)添加SSL記錄協議的頭,發送數據。 到了這個位置,發送過程就已經結束,接下來就是接收的過程了。 接收過程: (1)接收數據,從SSL記錄協議的頭中獲取相關信息; (2)使用指定的解密算法解密數據; (3)使用指定的MAC算法校驗MAC; (4)使用壓縮算法對數據解壓縮(在需要進行); (5)將記錄進行數據重組; (6)將數據發送給高層。 (7)SSL記錄協議處理的最後一個步驟是附加一個SSL記錄協議的頭,以便構成一個SSL記錄。SSL記錄協議頭中包含了SSL記錄協議的若幹控製信息。 如果面試官問你,簡述SSL的工作流程? 如果你這麼說,感覺就不是那麼的給力,你這時候就可以給他區分一下了,就是服務器認證階段,和用戶認證的階段了。 服務器認證階段: (1)客戶端向服務器發送一個開始信息「Hello」以便開始一個新的會話連接; (2)服務器根據客戶的信息確定是否需要生成新的主密鑰,如需要則服務器在響應客戶的「Hello」信息時將包含生成主密鑰所需的信息; (3)客戶根據收到的服務器響應信息,產生一個主密鑰,並用服務器的公開密鑰加密後傳給服務器; (4)服務器恢復該主密鑰,並返回給客戶一個用主密鑰認證的信息,以此讓客戶認證服務器。 用戶認證階段: 在此之前,服務器已經通過了客戶認證,這一階段主要完成對客戶的認證。經認證的 服務器發送一個提問給客戶,客戶則返回(數字)簽名後的提問和其公開密鑰,從而向服務器提供認證。 把這玩意給面試官一說,沒啥毛病吧。 SSL 的加密方式 說到加密,這就有點深入了,加密算法主要分為了兩大類。 第一類: 對稱加密 第二類: 非對稱加密 什麼事對稱加密呢? 對稱式加密實際上就是加密和解密使用同一個密鑰,通常稱之為「Session Key 」這種加密技術在當今被廣泛采用,如美國政府所采用的DES加密標準就是一種典型的「對稱式」加密法,它的Session Key長度為56bits。 而非對稱加密就稍微復雜了, 非對稱式加密就是加密和解密所使用的不是同一個密鑰,通常有兩個密鑰,稱為「公鑰」和「私鑰」,它們兩個必需配對使用,否則不能打開加密文件。這裏的「公鑰」是指可以對外公布的,「私鑰」則不能,只能由持有人一個人知道。它的優越性就在這裏,因為對稱式的加密方法如果是在網絡上傳輸加密文件就很難不把密鑰告訴對方,不管用什麼方法都有可能被別人竊聽到。而非對稱式的加密方法有兩個密鑰,且其中的「公鑰」是可以公開的,也就不怕別人知道,收件人解密時只要用自己的私鑰即可以,這樣就很好地避免了密鑰的傳輸安全性問題。 如果使用的話,各位想怎麼是用呢? 根據剛才阿粉說的服務器認證和用戶認證了,那麼就繼續來分析一下這個過程中 SSL 是如何加密的。 簡單說:(1)認證服務器 (2)協商會話秘鑰 (3)加密傳輸 但是如果你敢這麼說,你會被錘死。 強製在分解一下: 第一步:客戶端給出支持SSL協議版本號,一個客戶端隨機數(Client random,請註意這是第一個隨機數),客戶端支持的加密方法等信息; 第二步:服務端收到信息後,確認雙方使用的加密方法,並返回數字證書,一個服務器生成的隨機數(Server random,註意這是第二個隨機數)等信息; 第三步:客戶端確認數字證書的有效性,然後生成一個新的隨機數(Premaster secret),然後使用數字證書中的公鑰,加密這個隨機數,發給服務端。 第四步:服務端使用自己的私鑰,獲取客戶端發來的隨機數(即Premaster secret);(第三、四步就是非對稱加密的過程了) 第五步:客戶端和服務端通過約定的加密方法(通常是AES算法),使用前面三個隨機數,生成對話密鑰,用來加密接下來的通信內容; 這是不是就完成了呢?你學會了麼?