在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)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程珠玑

使用gcov和lcov测试代码覆盖率

通过gcov和lcov,可以很直观的看到代码的运行情况,同时也可以查看代码的行覆盖率,函数覆盖率等等信息,为开发提供一个方便的测试手段。

14030
来自专栏RainMark 的文章

构建 ARM Linux 4.7.3 嵌入式开发环境 —— U-BOOT 引导 Kernel

经过若干天的反复测试,搜索。终于成功利用 Qemu 在 u-boot 下引导 ARM Linux 4.7.3 内核。如下详细解释整个构建过程。

11630
来自专栏RainMark 的文章

Linux 下 LXD 容器搭建 Hadoop 集群

基于 LXD 的虚拟化容器,我们可以很方便的、很节约资源的在 Linux 主机下进行 3 节点甚至更多节点的 Hadoop 集群搭建练习。非常利于硬件资源不足的...

8620
来自专栏RainMark 的文章

浅谈 Linux 内核无线子系统

Linux 内核是如何实现无线网络接口呢?数据包是通过怎样的方式被发送和接收呢? 刚开始工作接触 Linux 无线网络时,我曾迷失在浩瀚的基础代码中,寻找具...

18320
来自专栏用户3029758的专栏

CentOS7基本配置

声明:本文为原创,作者为 对弈,转载时请保留本声明及附带文章链接:http://www.duiyi.xyz/centos7%e5%9f%ba%e6%9c%ac%...

11920
来自专栏用户3029758的专栏

linux基本命令

div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget...

20620
来自专栏web秀

Git详细教程 – 初识

想删除一段代码,又怕将来想恢复找不回来怎么办?有办法,先把当前文件“另存为……”一个新的文件,再接着改,改到一定程度,再“另存为……”一个新文件,这样一直改下去...

9330
来自专栏web秀

Git详细教程 – Git的安装

最早Git是在Linux上开发的,很长一段时间内,Git也只能在Linux和Unix系统上跑。不过,慢慢地有人把它移植到了Windows上。现在,Git可以在L...

13430
来自专栏RainMark 的文章

构建 ARM Linux 4.7.3 嵌入式开发环境 —— BusyBox 构建 RootFS

上一篇我们已经成功将 ARM Linux 4.7.3 的内核利用 U-BOOT 引导了起来。但是细心的你会发现,引导到后面,系统无法启动,出现内核恐慌 (Ker...

14330
来自专栏Bypass

【权限维持】Linux下的几种隐藏技术

攻击者在获取服务器权限后,会通过一些技巧来隐藏自己的踪迹和后门文件,本文介绍Linux下的几种隐藏技术。

30220

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励