在Windows Server 2008上部署免費的https證書


背景

  1. 后web時代,https加密的重要性不言而喻。主流瀏覽器均對http站點標記不安全,敦促web服務提供商盡快升級至https。

  2. 原先的https證書多由各大域名服務商提供,動輒成千上萬的部署證書的費用,一般個人站點及小微企業根本無力承擔。感謝開源,我們現在擁有無需付費的 Let s Encrypt 證書進行選擇。越來越多的企業開始加入Let s Encrypt 。

  3. Apple的上架審核,微信的小程序審核,都需要https證書作為支撐。

  4. Let s Encrypt 部署在Linux服務器下,有官方推薦Certbot客戶端 可以說是非常方便了。而想在Windows Server上部署,我們還需要一系列的操作進行證書的生成。

准備

在Windows平台上,許多優秀的開源作者已經為我們提供了相當好用的 Let s Encrypt 客戶端:

ACMESharp

Certify The Web

win-acme

ssl for free

制作證書

我用的第4個web客戶端,win平台下win-acme , ACMESharp(基於PowserShell)這兩種用的人都蠻多的。

  1. 輸入你想要部署https證書的域名(截至2018年04月,Let s encrypt已經支持免費的通配符域名)

  2. 我選擇的是 dns 校驗方式。域名新增一條符合規則的 txt 記錄就好。

  3. 注意!強烈推薦使用自己的 CSR !勾選 I have my own CSR 。確保證書的私鑰僅有自己知道。

  4. Windows平台 CSR生成方式:

在Windows下,在 IIS 中選擇服務器->服務器證書->創建申請證書。

密鑰位長選2048位

得到txt格式的文件,將公鑰復制到sslforfree中(截取-----BEGIN NEW CERTIFICATE REQUEST-----和-----END NEW CERTIFICATE REQUEST-----之間的內容)

  1. Linux平台 CSR文件生成方式

利用openssl

openssl req -new -nodes -sha256 -newkey rsa:2048 -keyout myprivate.key -out mydomain.csr
  1. 下載證書: 這里證書有兩份文件,private.key和certificate.crt,其中private.key應該是空的,這表示用的自己的CSR,sslforfree網站並不知道private.key是多少,安全可靠。

  2. 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

部署證書

  1. 在 IIS 中選擇服務器->服務器證書->導入上面生成的 pfx 文件。

  2. 選擇站點,綁定https,選擇證書。

  3. 開啟入站的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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM