背景
-
后web時代,https加密的重要性不言而喻。主流瀏覽器均對http站點標記不安全,敦促web服務提供商盡快升級至https。
-
原先的https證書多由各大域名服務商提供,動輒成千上萬的部署證書的費用,一般個人站點及小微企業根本無力承擔。感謝開源,我們現在擁有無需付費的 Let s Encrypt 證書進行選擇。越來越多的企業開始加入Let s Encrypt 。
-
Apple的上架審核,微信的小程序審核,都需要https證書作為支撐。
-
Let s Encrypt 部署在Linux服務器下,有官方推薦Certbot客戶端 可以說是非常方便了。而想在Windows Server上部署,我們還需要一系列的操作進行證書的生成。
准備
在Windows平台上,許多優秀的開源作者已經為我們提供了相當好用的 Let s Encrypt 客戶端:
制作證書
我用的第4個web客戶端,win平台下win-acme , ACMESharp(基於PowserShell)這兩種用的人都蠻多的。
-
輸入你想要部署https證書的域名(截至2018年04月,Let s encrypt已經支持免費的通配符域名)
-
我選擇的是 dns 校驗方式。域名新增一條符合規則的 txt 記錄就好。
-
注意!強烈推薦使用自己的 CSR !勾選 I have my own CSR 。確保證書的私鑰僅有自己知道。
-
Windows平台 CSR生成方式:
在Windows下,在 IIS 中選擇服務器->服務器證書->創建申請證書。
密鑰位長選2048位
得到txt格式的文件,將公鑰復制到sslforfree中(截取-----BEGIN NEW CERTIFICATE REQUEST-----和-----END NEW CERTIFICATE REQUEST-----之間的內容)
- Linux平台 CSR文件生成方式
利用openssl
openssl req -new -nodes -sha256 -newkey rsa:2048 -keyout myprivate.key -out mydomain.csr
-
下載證書: 這里證書有兩份文件,private.key和certificate.crt,其中private.key應該是空的,這表示用的自己的CSR,sslforfree網站並不知道private.key是多少,安全可靠。
-
crt證書轉為iis可用的pfx證書。
這里需要使用open ssl,如果你有Linux服務器或虛擬機的話很方便。否則需要自行Google win平台安裝open ssl的方法。
Linux平台下利用open ssl ,利用生成csr文件的private.key,執行下面的命令
openssl pkcs12 -export -out server.pfx -inkey private.key -in certificate.crt
部署證書
-
在 IIS 中選擇服務器->服務器證書->導入上面生成的 pfx 文件。
-
選擇站點,綁定https,選擇證書。
-
開啟入站的443端口,至此,部署完畢。
微信小程序 TLS 1.2
由於小程序要求的TLS版本必須大於等於1.2 , 而windows server 2008默認為TLS 1.0
1.解決方案:在Powershell中運行下面代碼后重啟。
# Enables TLS 1.2 on windows Server 2008 R2 and Windows 7
# These keys do not exist so they need to be created prior to setting values.
md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2"
md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server"
md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client"
# Enable TLS 1.2 for client and server SCHANNEL communications
new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" -name "Enabled" -value 1 -PropertyType "DWord"
new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" -name "DisabledByDefault" -value 0 -PropertyType "DWord"
new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" -name "Enabled" -value 1 -PropertyType "DWord"
new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" -name "DisabledByDefault" -value 0 -PropertyType "DWord"
# Disable SSL 2.0 (PCI Compliance)
md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server"
new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server" -name Enabled -value 0 -PropertyType "DWord"
# Enables TLS 1.2 on Windows Server 2008 R2 and Windows 7 # These keys do not exist so they need to be created prior to setting values. md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2" md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" # Enable TLS 1.2 for client and server SCHANNEL communications new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" -name "Enabled" -value 1 -PropertyType "DWord" new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" -name "DisabledByDefault" -value 0 -PropertyType "DWord" new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" -name "Enabled" -value 1 -PropertyType "DWord" new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" -name "DisabledByDefault" -value 0 -PropertyType "DWord" # Disable SSL 2.0 (PCI Compliance) md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server" new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server" -name Enabled -value 0 -PropertyType "DWord"
2.注意:TLS 1.2 至少需要服務器版本為Windows Server 2008 Service Pack 2 (SP2)