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

  • 2019 年 10 月 5 日
  • 筆記

背景

  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:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2"  md "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Server"  md "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Client"    # Enable TLS 1.2 for client and server SCHANNEL communications  new-itemproperty -path "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Server" -name "Enabled" -value 1 -PropertyType "DWord"  new-itemproperty -path "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Server" -name "DisabledByDefault" -value 0 -PropertyType "DWord"  new-itemproperty -path "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Client" -name "Enabled" -value 1 -PropertyType "DWord"  new-itemproperty -path "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Client" -name "DisabledByDefault" -value 0 -PropertyType "DWord"    # Disable SSL 2.0 (PCI Compliance)  md "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsSSL 2.0Server"  new-itemproperty -path "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsSSL 2.0Server" -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:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2" md "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Server" md "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Client" # Enable TLS 1.2 for client and server SCHANNEL communications new-itemproperty -path "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Server" -name "Enabled" -value 1 -PropertyType "DWord" new-itemproperty -path "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Server" -name "DisabledByDefault" -value 0 -PropertyType "DWord" new-itemproperty -path "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Client" -name "Enabled" -value 1 -PropertyType "DWord" new-itemproperty -path "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Client" -name "DisabledByDefault" -value 0 -PropertyType "DWord" # Disable SSL 2.0 (PCI Compliance) md "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsSSL 2.0Server" new-itemproperty -path "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsSSL 2.0Server" -name Enabled -value 0 -PropertyType "DWord"

2.注意:TLS 1.2 至少需要伺服器版本為Windows Server 2008 Service Pack 2 (SP2)