現在都流行 https,今天晚上花了二個小時,學習了一下,這里做個學習總結:
因為剛開始接觸,就使用免費的:Let's Encrypt
Let's Encrypt證書特點:
1. 現在主流的瀏覽器(chrome, firefox, ie)都支持 Let's Encrypt 證書。
2. 申請ssl證書簡單快捷,用戶名都不需要注冊就能獲取。
3. 免費證書有效期: 3 個月,到期后需要重新獲取證書,重新安裝。
我是根據 http://www.itbulu.com/ssl-for-free.html 提供的信息來操作的:
從 https://www.sslforfree.com 獲取免費ssl證書。
只需簡單的上傳一個文件,驗證一下網站的所有者就可以了。
注意:下載的文件存放在 /.well-known/acme-challenge/ 由於文件夾[.well-known]中含有一個小數點,所以在iis中需要配置一下MIME類型,否則上傳的驗證文件無法訪問。
獲取到的證書文件有3個:
ca_bundle.crt
certificate.crt
private.key
由於我是在 iis 上使用,iis 安裝ssl證書需要的是一個 .pfx 文件。這需要使用 openssl.exe 生成一個 .pfx 文件。
好在我電腦上原來有一個自已編譯的 openssl.exe,剛好能用上。
根據 www.sslforfree.com 的提示,執行下列命令生成 certificate_combined.pfx:
openssl pkcs12 -export -out "certificate_combined.pfx" -inkey "private.key" -in "certificate.crt" -certfile ca_bundle.crt
輸入一個密碼,然后再重復輸入一次密碼,就 生成 certificate_combined.pfx 文件了。
然后在iis上,在一個站點上點右鍵,查看【屬性,配置服務器證書,選擇【從 .pfx 文件導入證書】。
這樣就完成了 http -> https 的升級。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
將 cert 和 key 文件轉換成java使用的 jks(keystore)文件的方法:
1. 生成 PKCS#12 文件
openssl pkcs12 -export -in "certificate.crt" -inkey "private.key" -certfile "ca_bundle.crt" -out "qlz.p12" -name "qlz"
驗證文件(測試用,這一步不重要): keytool -rfc -list -keystore qlz.p12 -storetype pkcs12
2. 生成 jks 文件 (參考: https://stackoverflow.com/questions/11952274/how-can-i-create-keystore-from-an-existing-certificate-abc-crt-and-abc-key-fil)
keytool -importkeystore -srckeystore qlz.p12 -srcstoretype PKCS12 -destkeystore qlz.jks -deststoretype JKS
完工,生成的 qlz.jks 就可以供 java 直接使用。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
需要注意的地方:
1. 如果有多個站點,其中一個開啟了https,就會占用 443 端口。另一個站點如果同時想開啟https,就會提示失敗,因為無法開啟443端口了。
查了一下相關資料,說是 iiis 6,因為使用ssl,無法讀取請求的主機頭(host),所以只能讀取配置的第一個ssl證書,如果有多個ssl證書,就無法正確與host相匹配了。 好像說 iis8開啟一個功能*SNI (Server Name Indication),就能解決這個問題。
2. 每隔3個月,證書到期一次,需要重復操作一次,更新證書。