最近調試mqtt協議,爲了保證數據安全性和未來客戶端的對雲的兼容性選擇了openssl做爲安全加密中間層,而沒有使用私有的加密方式。因此花了點時間學習了一下ssl 加密流程整理以下:html
由於正常正式使用場合是CA機構給對應的組織結構頒發CA證書的,這裏是調試就本身使用opanssl 生成證書了,不少細節參考下面的參考博文。配置過程:安全
#這一步原本是要證書籤發機構,發行給網站組織。下面的方式是調試本身產生組織根證書服務器
openssl req -new -x509 -days 36500 -extensions v3_ca -keyout ca.key -out ca.crt學習
#購買方使用買的證書(組織根證書)給自服務器產生祕鑰
opensslgenrsa -out server.key 2048
#拿服務器祕鑰計算服務器數字簽名,未來這個CSR文件會發送到請求交互方,ssl_client必須驗證 ssl_server
openssl req -out server.csr -key server.key -new
#拿數字簽名和證書機構給的組織證書和組織祕鑰產生服務器證書,至此服務器已經具有ssl條件
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 36500網站
#使用買的證書(組織證書)給客戶端產生祕鑰
opensslgenrsa -out client.key 2048
#拿祕鑰計算數字簽名,未來這個CSR文件會發送到請求交互方服務器(若是服務器須要驗證client),ssl_server選擇性驗證 ssl_client
openssl req -out client.csr -key client.key -new
#拿數字簽名和證書機構給的組織證書和組織祕鑰產生客戶端證書,至此client已經具有ssl條件
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 36500加密
彙總成爲一個腳本就是:spa
openssl req -new -x509 -days 36500 -extensions v3_ca -keyout ca.key -out ca.crt openssl genrsa -out server.key 2048 openssl req -out server.csr -key server.key -new openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 36500 # # openssl genrsa -out client.key 2048 openssl req -out client.csr -key client.key -new openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 36500
SSL 的身份認證過程:調試
一、client 會擁有服務器的證書(非CA給的證書),在client請求服務器時服務器會返回簽名文件。--------------明文
二、經過本地的服務器的證書鑑別簽名文件就能知道服務器是否可信,若是可信前面的解密服務器簽名文件的過程獲得了服務器的公鑰。
三、用服務器的公鑰加密主密鑰計算分散因子(Change Cipher Spec)後發送到服務器同時告知服務器協商後使用這個主密鑰。--------------密文
四、服務器用私鑰解密這個分散因子,並返回client確認協商結果和可能還帶有會話ID。--------------密文
五、此時clien 就使用以前第三步告訴服務器的祕鑰,若是成功解密服務器的迴應則說明服務器是合法的。-------------到此客戶端驗證服務器身份和祕鑰交換就結束了。code
若是服務器須要驗證客戶端則還須要以下過程(這個通常不多使用,由於須要服務器保存全部合法客戶端的的證書):
1.五、在服務器回發本身的數字簽名後會同時請求client的數字簽名,而後驗證數字簽名是否正確。其他過程不變。server
這裏的1.5表明在上面步驟的第一步和第二步之間。
參考博文寫的很是好:https://www.cnblogs.com/bhlsheji/p/4586597.html