關於國密HTTPS 的那些事(一)
隨着《密碼法》密碼法的頒布與實施,國密的應用及推廣終於有法可依。而對於應用國密其中的一個重要組成部分----國密HTTPS通信也應運而生。為了大家更好的了解國密HTTPS相關的知識,接下來打算和大家一起分享關於國密HTTPS 的那些事。聊一聊關於HTTPS通信協議本身;聊一聊為什么要有這些協議;以及國密SSL協議到底又是如何對一個網站進行數據加密的;國密SSL協議中又使用了哪些國密算法;國密的雙證書和傳統的RSA證書單證書在握手協商中又有什么區別等等,由於篇幅較長,時間有限,所以只能選擇逐步和大家分享。
為了讓更多的朋友看懂和了解這個行業和領域,明白其中的內容,本文用通俗易通、輕松愉快的方式來表達解析這些枯燥的詞匯。
1.關於HTTPS
講到https通信,那就避免不了要講到枯燥乏味的通信協議,相信大家在上網的時候肯定會有意無意的都會見到HTTP、 HTTPS、SSL、TLS 等 這些關鍵字或標簽。那么我們先簡單的了解一下他們代表的含義 ,然后梳理一下它們之間的關系。
HTTP: (HyperText Transfer Protocol)超文本傳輸協議,相信大家都不陌生,打開瀏覽器就能看到。
SSL:( Secure Sockets Layer )安全套件字層。可分為兩層: SSL記錄協議(SSL Record Protocol)和 SSL握手協議(SSL Handshake Protocol)。
TLS :( Transport Layer Security )傳輸層安全協議。也分為兩層 TLS 記錄協議(TLS Record)和 TLS 握手協議(TLS Handshake)。
之所以這么表達,就是讓聰明的你看出其中的端倪。細心的朋友肯定會發現,SSL 和TLS怎么這么相似啊,難道?對!你的直覺就體現了他們之間的關系。TLS就是建立在SSL3.0協議規范之上的協議。所以很多時候你會發現他們倆是被綁定在一起呈現的SSL/TLS。要硬說他們的關系,用時下的網絡語言描述那就是:有點像CP,又好似前浪和后浪。至於這些協議怎么用后面會介紹到。
HTTPS: 就是HTTP + SSL/TLS。
理清楚了他們的關系,我們就算是入門了。至於為什么要把http協議變成https。相信大家都很清楚,因為少了s,就像光着身子在人潮涌動的人流中奔跑。只要別人想看,你的腳步,永遠比不過人家看的你速度,甚至還有人會駐足,對你注目。 好像還有點押韻,skr...。
所以對一個http的站點來說,毫無隱私可言,更談不上安全了。所以趕緊給你的站點穿上“衣服”吧。
- 關於協議
前面說了https,說到這里,問題又來了。既然說部署了https,就像給網站穿了“衣服”,保護住了自己的隱私,那么這個“衣服”又是怎么來保護自己的隱私的呢?沒錯,就是通過SSL/TLS協議,我們先來看看國密協議的整個流程,大家在看整個流程的時候思考一下 SSL/TLS到底解決了哪些問題,他是如果保護你數據安全的?
國密SSL通信依據的協議是中國人民共和國密碼行業標准《SSL VPN技術規范GM/T 0024--2014》協議。其協議流程和 傳統的使用RSA證書的TLS協議流程基本一致,但是又有區別,因為傳統的TLS協議中服務端使用的是單證書,而國密SSL VPN協議在雙方的握手的過程中服務端使用的是雙證書(簽名證書和加密證書)。
下面我們來看國密SSL的主要握手流程:
根據《SSL VPN技術規范GM/T 0024--2014》協議,我們對整個握手的流程整理如下:
下面我們來分析整個過程。
- 客戶端首先會發送ClientHello消息與服務端進行握手,在ClinentHello消息中包括了加密套件和隨機數。
- 在服務端接收到客戶端的握手請求后,會結合自己的證書選擇合適的加密套件返回給客戶端,並且會產生隨機數一起發送。
- 服務端會繼續發送Certificate消息給客戶端,在Certificate消息中會包含雙證書,即簽名證書和加密證書,加密證書放在簽名證書前面。
- 服務端根據選定的握手協議,接着發送ServerKeyExchange消息。如果選用的是ECC_SM4_SM3套件,則在消息中包含着服務端對雙方隨機數和服務端加密證書的簽名。
- 如果服務端開啟了雙向認證,則會繼續發送CertificateRequest消息給客戶端。
- 在客戶端接收到服務端的回復后,如果收到了5中發送的消息,則會先回復ClientCertificate消息給服務端,如果沒有收到,則跳過此步驟。
- 如果客戶端收到了5的請求, 則在發送完6的消息后緊接着發送ClientKeyExchange給服務端,否則ClientKeyExchange是客戶端在收到服務端消息后回復給服務端的第一條信息。如果選用的是ECC_SM4_SM3套件,則這條消息的主要內容是用服務端加密證書公鑰加密的預主秘鑰。
- 如果客戶端發送了6的消息,則需要發送CertificateVerify消息給服務端,這條消息用來鑒別客戶端是否為證書的合法持有者。
- 最后在服務端和客戶端各自在密碼規格變革消息后都會發送Finished消息給對方。用於驗證秘鑰交換過程是否成功,並校驗握手過程的完整性。
- 到此整個國密SSL握手的流程就結束了,協議雙方會使用協商出來的對稱秘鑰對通信的數據進行加解密。
以上就是國密SSL通信的整個握手流程。
不知道大家看完之后的感受是什么?是意猶未盡,是五味雜陳,還是有些萌萌達?沒關系,這些都不重要!重要的是!!! SSL/TLS協議到底解決了哪些問題?它又是如果通過這個流程來保障數據安全的呢?我們下回接着聊!
原創:探花郎
申請支持國密算法SM2 256位加密證書