SSL 的雙向認(rèn)證就是,客戶端要獲取服務(wù)端的證書,檢查下服務(wù)端是不是我可以信任的主機,否則我就認(rèn)為那個站點的內(nèi)容不可信任,不應(yīng)該去訪問你(瀏覽器會告訴你),同時服務(wù)端也要檢查客戶端的證書,客戶端如果不是服務(wù)端所信任的,那服務(wù)端也會認(rèn)為,你不是我的合法用戶,我拒絕給你提供服務(wù)。所以,要讓 HTTPS 的雙向認(rèn)證順利完成,就要在服務(wù)端給定一個證書,這個證書是瀏覽器可信任的,同時客戶端(瀏覽器)也要發(fā)送給服務(wù)端一個證書,服務(wù)器端也要信任這個證書。 要想讓瀏覽器純自然地就去信任服務(wù)端的證書,那服務(wù)端所使用的證書就得是那幾大已經(jīng)被大家所信任的證書機構(gòu)給他簽名,不過一般要錢…不好 如果自己擔(dān)當(dāng)證書機構(gòu)(Certificate Authority, CA)的角色的話,可以這么搞。 1、準(zhǔn)備CA密鑰通常是在 linux 用 openssl 命令來搞,不過 Windows 下也可以,裝個 Git 一般會帶上 windows 的編譯版本了。
2、生成CA證書請求證書請求都是根據(jù)私鑰來生成的
3、簽名CA證書請求使用自己的私鑰來給這個CA證書請求簽名
4、CA證書轉(zhuǎn)換為DER格式DER 格式似乎更加通用,iOS 直接認(rèn)
現(xiàn)在,終于拿到了自己做 CA 需要的幾個文件了,密鑰 ca-key.pem,證書 ca-cert.pem,系統(tǒng)使用的 ca.der,接下來,要創(chuàng)建一個網(wǎng)站,就需要讓 CA 給他簽名一個證書了 6、準(zhǔn)備網(wǎng)站密鑰網(wǎng)站自己也需要準(zhǔn)備一個密鑰,類似于 CA,假如這個網(wǎng)站的域名是 su.su
7、生成網(wǎng)站證書請求網(wǎng)站通過密鑰生成證書請求,當(dāng)然,這個請求一般是要提交給 CA,讓 CA 進行簽名的
8、CA簽名網(wǎng)站證書請求不是拿到 CA 的證書了就可以說自己是 CA 的,最重要的是,簽名需要有 CA 密鑰
如果客戶端(個人瀏覽器)信任 CA 的證書的話,那么他也就會信任由 CA 簽名的網(wǎng)站證書,因此讓瀏覽器信任 CA 的證書之后,客戶端就自然信任服務(wù)端了,只要做單向認(rèn)證的話,到這一步證書這一類材料就已經(jīng)準(zhǔn)備好了,但是雙向認(rèn)證就還要給客戶端(個人的瀏覽器)準(zhǔn)備一份證書,讓服務(wù)端可以知道客戶端也是合法的。假如讓服務(wù)端也信任 CA 的證書,那 CA 簽名的客戶端證書也就能被信任了。 9、準(zhǔn)備客戶端私鑰不變的方法不需要解釋
10、生成客戶端證書請求不變的方法不需要解釋
11、CA簽名客戶端證書請求不變的方法不需要解釋
12、客戶端證書轉(zhuǎn)換為DER格式不變的方法不需要解釋
13、客戶端證書轉(zhuǎn)換為 PKCS #12格式全稱應(yīng)該叫做 Personal Information Exchange,通常以 p12 作為后綴
14、配置 nginx比如,類似下面這樣一段
我沒有使用 ssl-sesion-cache 是因為遇到了錯誤… 15、配置瀏覽器證書瀏覽器首先需要信任自簽名的 CA 證書,這樣他就可以直接信任服務(wù)端提供的證書了,為了雙向認(rèn)證成功,瀏覽器還需要提供一個傳送給服務(wù)端的證書,也就是上面制作的客戶端證書,對于 IE 來講,首先在 Internet Options 里選擇 Content 選項卡,然后點擊 Certificates,新窗口的 Trusted Root Certification Authorities 選項卡選擇導(dǎo)入,選擇制作好的 ca.cer;其次在 Personal 選項卡選擇導(dǎo)入 qiyi.p12,當(dāng)然,這里導(dǎo)入的時候還需要輸入密碼-.- 16、測試成果當(dāng)將一切都設(shè)置好,將 nginx 啟動成功后,就可以打開 IE 來訪問了,第一次訪問,瀏覽器會詢問雙向認(rèn)證時使用的證書,類似下圖 選擇客戶端證書 順利打開,瀏覽器沒有紅色的警告提示,正常顯示頁面內(nèi)容就大功告成了。 參考:本文鏈接: http:///archives/347.html , 轉(zhuǎn)載請注明出處,此外還可以訂閱我。 相關(guān)日志 Relate Posts |
|