生成本地測試用https證書,支持通配符和多域名,初學OpenSSL

18-01-26在v2ex上看到一妹紙發的《身爲一個 21 歲的年輕程序員,我已經腰突了(躺》,哈哈,感同身受,想到這幾天我左腿麻木持續了好幾天,前幾天屁股疼的只要坐下就站不起來,不過站着卻一點事沒有,而後堅持站了好幾天,目前屁股不疼,腿麻的毛病尚未恢復。。。[後續]程序員

封面圖怎麼發?

接觸到的https

https站點生產環境和本地測試環境搭建之前也有點接觸(Windows Server2008 20十二、Win7+IIS、尚未接觸過其餘系統Mac OS算半個),好比生產環境的:從免費的AlphaSSL通配符證書申請(好像已經關掉了),到坐等2月27號Let’s Encrypt正式開統統配符證書接口。瀏覽器

爲何執意要通配符證書,其實不用也能夠,不過要看服務器臉色,Windows Server2008不支持SNI哦,若是是騰訊雲或者別的地方免費申請的單域名證書就有點慘了,目前瞭解到的針對這種單域名的只有加上端口才能多個域名同時使用。免費的Let’s Encrypt籤的多域名證書3月要維護一次,感受好累啊~服務器

本地測試環境相對就簡單多了,本身想怎麼搞就怎麼搞,證書想怎麼籤就就怎麼籤,誰要測試就在電腦上把根證書一裝,妥妥的。網絡

之前生成證書比較簡單,直接用Windows Server系統自帶功能證書頒發機構就能夠完成證書的簽發,也一直是這麼幹的,給我臺式電腦ip簽了一個證書,須要的功能開發基本上都知足了,要求其實並無那麼高@.@ 網絡上的一幅圖學習

好了,爲何又扯出OpenSSL了呢,若是沒有Windows Server,Win7是沒有證書頒發機構這個玩意的,額外再裝一個虛擬機嗎?不方便,而且對證書頒發機構不夠熟,高級點的證書還要好好研究。須要尋找別的方法了,首選就是OpenSSL了。測試

準備工做

由於用的是Win7系統,下載了Win32OpenSSL。之前沒有怎麼用過OpenSSL,用的最多也就是生成個把子RSA祕鑰,對於簽名和證書是歷來沒有接觸過的,而外花了半天時間搜索學習生成ssl通配符和多域名證書的方法。spa

IIS全站https計劃

準備這樣對二級域名進行細分,舉個栗子aa.com:code

  1. www .aa .com、aa .com:網頁和接口
  2. static .aa .com:靜態資源,圖片、js等
  3. *.aa .com:其餘功能站點子域名,廣告、單獨功能站點
  4. bb .com、cc .com:其餘域名,備用

一、三、4是所有要上https的,2這個分http和https,js必需要https,圖片之類的沒有強制要求,默認所有是https的,讓瀏覽器有把小綠鎖。blog

根據這些域名,本地測試生成證書就有方向了,最好是一個證書解決,否則IIS配置麻煩的要死。用通配符和多域名解決。dns

生成本地測試證書

根據網上找到的資料,正常生成了證書。先生成根證書,而後生成域名證書,最後用根證書對域名證書籤名。把根證書導入目標電腦上就能正常訪問全部對應的域名了。

1. 建立根證書

@echo off
set OPENSSL_CONF=openssl.ini

echo 建立祕鑰
pause
openssl genrsa -out LocalRootCA.key 2048

echo 生成證書並自簽名
pause
openssl req -sha256 -new -x509 -days 3650 -key LocalRootCA.key -out LocalRootCA.crt -subj "/CN=LocalRootCA"

echo 完成
pause

2. 建立域名證書

@echo off
set OPENSSL_CONF=openssl.ini

echo 建立祕鑰
pause
openssl genrsa -out aa.com.key 2048

echo 建立請求文件
pause
openssl req -new -sha256 -key aa.com.key -out aa.com.csr -subj "/CN=*.aa.com"

echo 生成證書並用根證書籤名
pause
openssl x509 -req -in aa.com.csr -CA LocalRootCA.crt -CAkey LocalRootCA.key -CAcreateserial -days 3560 -out aa.com.crt -extfile aa.com.ini -extensions ext

echo 導出pfx,請輸入密碼
pause
openssl pkcs12 -export -out aa.com.pfx -inkey aa.com.key -in aa.com.crt

echo 完成
pause

3. 以上代碼涉及到兩個配置文件:

(1) openssl.ini就是OpenSSL安裝目錄中的配置文件,原封不動的(除了文件名) (2) aa.com.ini是多域名配置列表,文件內容:

[ ext ]
subjectAltName = @dns

[ dns ]
DNS.1 = aa.com
DNS.2 = *.aa.com
DNS.3 = bb.com
DNS.4 = cc.com
DNS.5 = localhost
DNS.6 = 127.0.0.1

4. 測試

將根證書導入到系統受信任的根證書頒發機構裏面,將生成的pfx文件導入到iis裏面,站點綁定https,這時我電腦上彈出丟失證書鏈的提示,不過好像並無什麼影響。瀏覽器訪問正常的很: 域名訪問測試

生成的證書文件

#收尾 能夠看到,經過OpenSSL本地已生成了支持通配符和多域名的證書,本地https全站化測試環境搭建的證書資源算是妥了,想要什麼樣的就立馬生成什麼樣的,能夠看到除了域名,IP也是能夠支持進去的。

若是要切換到線上,要簡單省錢,等到2月Let’s Encrypt就能提供完美的解決方案了,說到底仍是買不起證書,我用免費的。

預告:證書搞完後,下一件已完成的事是把統計局的2017年5月發佈的新的行政區劃數據從新採集了一遍(省市區鎮數據),含數據格式化和拼音標註,整個過程用純js處理的,這個方法比較拿手,過段時間針對這個功能會單獨發一篇文章。

[接續] 多是躺久了或者是持續坐久了的的緣由吧,來三亞將近20天一直貓在一間5平米不到的小屋裏面,行李箱當桌子、牀當凳子,矮了點。不事後面幾天站着還好,至少沒有屁股和腰疼的毛病,前段時間上班經歷了第一次腰疼,疼了半個月,不過本身恢復了。少坐多站,坐也要坐好,躺也要躺好。

相關文章
相關標籤/搜索