
IIS 启用 TLS 1.3 与 QUIC

最近有个想法,就是把服务器的系统换成 Windows Server(当然我还没换就是了),这样方便运行网站的时候顺便挂个 QQ 啥的(嘿嘿)。不过 Windows Server 默认的 Web 服务器是 IIS,但是这个东西默认情况下并不支持 TLS 1.3 还有 QUIC,这就使得网站性能会有一点降低。
如果想要用上 TLS 1.3 还有 QUIC,那么要么用别的 Web 服务器,要么让其支持这两个技术。由于 Windows 上能用的其他 Web 服务器性能都不好,(这里必须强调一下,很多人顺着 Linux 上的经验,觉得 nginx 很好很强大,于是到了 Windows 上也想当然的觉得 nginx 依然很好很强大;事实上由于缺少大量 nginx 提升性能的内核操作,导致 Windows 上的 nginx 性能依然很差,跟 Linux 上的完全就是两个东西。)那我们就只能选择支持这两个技术了。
开始之前
操作系统必须是 Windows Server 2022 及以上才行;什么 2019,2016,甚至 2008 之类的都不行。
由于这两个东西都要用到 HTTPS,为了方便起见,我这里拿云服务器来演示一下操作:
我是忠实的腾讯云用户(没办法我支付宝里没有钱……呜呜呜),所以咱就拿腾讯云演示了啊,重点就是服务器镜像要选择 Windows Server 2022 及以上的版本。
创建好之后,建议绑定 IP 地址到一个域名上面,方便后续申请 SSL 证书。
安装 IIS
喜欢 GUI,那就拿服务器管理器安装。废话不多说,看图:
喜欢命令行也没关系,以管理员身份打开 Powershell (记得是 Powershell!不是命令提示符!),输入:
Install-WindowsFeature -Name Web-Server -IncludeManagementTools
命令继承了 Powershell 命令一贯以来又臭又长的传统,总之输完回车,等待跑条结束就算装上了。
配置 IIS
先不管那么多,添加一个站点:
比较新的 Windows Server 2022 版本,可能这里会直接出现 TLS 1.3 和 QUIC 的设置。如果没有,那就需要改几个注册表。
直接拿 Powershell 干他,注册表在 Powershell 里面是以 PSDrive 的形式出现的,可以用文件命令直接操作:
TLS 1.3
New-Item 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Server' -Force
New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Server' -Name 'Enabled' -Value '1' -PropertyType 'DWord'
New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Server' -Name 'DisabledByDefault' -Value '0' -PropertyType 'DWord'
QUIC
New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\services\HTTP\Parameters' -Name 'EnableHttp3' -Value '1' -PropertyType 'DWord'
New-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\services\HTTP\Parameters' -Name 'EnableAltSvc' -Value '1' -PropertyType 'DWord'
这些操作干完之后,重启服务器,就可以顺利打开这两项功能了。(再次提醒,只有 Windows Server 2022 以上有这些东西,以前的版本,哪怕你设置了这些注册表项,也是没辙。)
向 IIS 添加 SSL 证书
我们这里选用 win-acme (WACS) 这个工具来申请 SSL 证书。这个东西功能强大,并且和 Certbot 一样支持插件,也可以实现如 Certbot 一样自动泛域名证书这样的操作。这里我们只用到它最基本的功能就行。
直接下载标有 Recommended(推荐)的版本即可。
注意不要解压到用户文件夹里面(即路径开头是 C:\Users\ 的路径),会有权限问题。
输入 “m” 然后回车。记得跟别的大部分这种界面的软件不一样,要回车,不要以为是软件卡住了。
这里要我们选择域名,软件支持从 IIS 直接读取域名信息,不过我们这里没有绑定任何的域名,因此输入 “2” 手动输入。
输入完回车,会让你给证书选一个名字。这个名字只是给自己看的,所以无所谓,保持默认也可以(直接回车就是保持默认)。
接下来就是一路回车就行了,不用怎么配置。
一直回车到这个地方,会问你把证书绑定在哪个地方。这里我是新的机器,因此就一个网站,那就选它了,输入 “1” 然后回车。
然后就是继续一路回车,直到回到软件的主界面。这时候准备工作就基本做齐了,开始测试。
测试 IIS
TLS 1.3
这个很简单,直接用浏览器打开网页,然后查看 TLS 版本即可。
我这里用的是 Edge,方法是按 F12 打开开发人员工具,然后转到 “隐私与安全” 选项卡。
可以看到 TLS 1.3 启用成功了。
和不支持 TLS 1.3 的旧版 IIS 进行对比:
QUIC
测试 QUIC 之前我们先来回顾一下 QUIC 的全称:Quick UDP Internet Connections。
防火墙/安全组忘记开 UDP 443 端口的可以赶紧去开了。
这里我们拿 LiteSpeed (是的没错就是这个公司)的一个小工具检查 QUIC 是否已经启用了:HTTP/3 Check
不要太在意名字,QUIC 和 HTTP/3 在现在基本上指的就是一个东西(雾)
如果你看到类似这样的结果:
那么恭喜你,你成功了,可以收工了!
(别忘了把不用的云服务器销毁)