基本原則
加密過程:公鑰加密规哲,只有私鑰解密
簽名過程:私鑰加密明文撩笆,公鑰解密為明文唆貌,公鑰可以透過數(shù)字證書認證機構(gòu)簽授的電子證書形式公布
https流程:
1. client一般內(nèi)置可信機構(gòu)的CA信息以及公鑰
2. server用自己公鑰去申請證書(上傳公鑰或者個人信息到第三方認證機構(gòu),得到證書(含公鑰和私鑰))粟耻,其中具體為:先通過csr工具生成兩個文件查近,一個為CSR文件眉踱,用來向CA機構(gòu)申請的文件,一般以CSR結(jié)尾霜威,一個是KEY文件谈喳,這個文件一定要保存好,這個文件就是對應(yīng)第一章節(jié)將的server端的私鑰戈泼,重新生成也會變更婿禽,配置到nginx服務(wù)器,具體配置為參考下面nginx配置
3. 發(fā)起請求時大猛,server端回復(fù)證書扭倾,含具體的頒發(fā)機構(gòu),持有者挽绩,有效期膛壹,公鑰,簽名等
4. client先比較持有者以及有效期唉堪,找操作系統(tǒng)內(nèi)置的CA模聋,和server端發(fā)過來的簽名進行解密,找不到則不可信
5. client從操作系統(tǒng)找出CA的公鑰唠亚,對server端發(fā)過來的簽名解密链方,使用相同的hash算法,計算服務(wù)器發(fā)過來的證書hash值趾撵,再將hash值和證書中的簽名做對比,也對比證書中的域名和實際域名共啃,如果一致占调,則沒有冒充
6. 瀏覽器讀取證書公鑰,生成后續(xù)通訊的對稱密碼移剪,然后用服務(wù)器公鑰對其加密究珊,并將加密后的“預(yù)主密碼”發(fā)送到服務(wù)器
7. 客戶端生成一個隨機數(shù),然后將隨機數(shù)及其簽名纵苛,客戶端證書剿涮,加密過的“預(yù)主密碼”發(fā)送到server端
8. 如果服務(wù)器需要驗證客戶端身份(可選),server檢查CA日期是否有效攻人,CA公鑰能否解密客戶端CA的簽名取试,以及檢查其有效性,怀吻,如果通過瞬浓,服務(wù)端用自己的私鑰解開加密的“預(yù)主密碼”,然后和客戶端用相同的方法生成相同的主通訊密碼
9. client向server發(fā)送消息蓬坡,指明后面通訊使用主通訊密碼猿棉,然后通知server握手過程結(jié)束
10. server向client端發(fā)送消息磅叛,知名后面通訊使用主通訊密碼,通知client端握手過程結(jié)束
11. ssl握手結(jié)束萨赁,后續(xù)使用對稱密鑰進行通訊
在雙向認證的時候才需要客戶端證書弊琴,如支付寶或者網(wǎng)銀需要認證客戶端身份,此外一般web應(yīng)用都使用單向認證
nginx的ssl配置
listen 443 ssl;
ssl_certificate /iyunwen/server/ssl/20180731.cer;
ssl_certificate_key /iyunwen/server/ssl/20180731.key;
ssl_prefer_server_ciphers on;
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4";
tomcat配置
其他
附幾種CA證書比較SSL協(xié)議可分為兩層: SSL記錄協(xié)議(SSL Record Protocol):它建立在可靠的傳輸協(xié)議(如TCP)之上杖爽,為高層協(xié)議提供數(shù)據(jù)封裝敲董、壓縮、加密等基本功能的支持掂林。 SSL握手協(xié)議(SSL Handshake Protocol):它建立在SSL記錄協(xié)議之上臣缀,用于在實際的數(shù)據(jù)傳輸開始前,通訊雙方進行身份認證泻帮、協(xié)商加密算法精置、交換加密密鑰等