18 01 26在v2ex上看到一妹紙發的《身為一個 21 歲的年輕程式員,我已經腰突了(躺》,哈哈,感同身受,想到這幾天我左腿麻木持續了好幾天,前幾天屁股疼的只要坐下就站不起來,不過站著卻一點事沒有,然後堅持站了好幾天,目前屁股不疼,腿麻的毛病還沒有恢復。。。[後續] 接觸到的https http ...
18-01-26在v2ex上看到一妹紙發的《身為一個 21 歲的年輕程式員,我已經腰突了(躺》,哈哈,感同身受,想到這幾天我左腿麻木持續了好幾天,前幾天屁股疼的只要坐下就站不起來,不過站著卻一點事沒有,然後堅持站了好幾天,目前屁股不疼,腿麻的毛病還沒有恢復。。。[後續]
接觸到的https
https站點生產環境和本地測試環境搭建以前也有點接觸(Windows Server2008 2012、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通配符和多功能變數名稱證書的方法。
IIS全站https計劃
準備這樣對二級功能變數名稱進行細分,舉個慄子aa.com:
- www .aa .com、aa .com:網頁和介面
- static .aa .com:靜態資源,圖片、js等
- *.aa .com:其他功能站點子功能變數名稱,廣告、單獨功能站點
- bb .com、cc .com:其他功能變數名稱,備用
1、3、4是全部要上https的,2這個分http和https,js必須要https,圖片之類的沒有強制要求,預設全部是https的,讓瀏覽器有把小綠鎖。
根據這些功能變數名稱,本地測試生成證書就有方向了,最好是一個證書解決,不然IIS配置麻煩的要死。用通配符和多功能變數名稱解決。
生成本地測試證書
根據網上找到的資料,正常生成了證書。先生成根證書,然後生成功能變數名稱證書,最後用根證書對功能變數名稱證書簽名。把根證書導入目標電腦上就能正常訪問所有對應的功能變數名稱了。
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平米不到的小屋裡面,行李箱當桌子、床當凳子,矮了點。不過後面幾天站著還好,至少沒有屁股和腰疼的毛病,前段時間上班經歷了第一次腰疼,疼了半個月,不過自己恢復了。少坐多站,坐也要坐好,躺也要躺好。