我们在 AWS 中部署了强化的 Windows Server 2022 服务器。这些服务器使用 TLS 加密通道与 RDS 服务器建立连接。在 TLS 协商期间,Windows 服务器将与Windows更新,大概是为了获取当前受信任的根权限列表(我们通过使用 Wireshark 观察网络流量找到了这一点 - 它非常可重复)。这些服务器无法访问公共互联网,因此下载超时。与数据库的连接在 Windows 更新下载超时之前超时,因此数据库访问失败。
在过去(比如 Windows Server 2012 时代),有一个注册表设置可用于控制证书的验证方式。我认为您可以指定 1-5,并且它会根据您选择的方式而有所不同。我认为这与受信任的根更新关系不大,而是与它是否下载 CRL 有关。
我的问题是“有人知道如何阻止 Windows 在 TLS 握手期间下载受信任根列表并强制信任 RDS 提供的服务器证书吗?”或者其他一些方法可以在没有公共互联网访问的情况下实现此连接。
答案1
所有 Windows 主机、服务器和桌面都将尝试更新根证书。有一个设置可以阻止该特定通信。
https://woshub.com/updating-trusted-root-certificates-in-windows-10/#h2_2
计算机配置->管理模板->系统->Internet 通信管理->Internet 通信。
此部分中的“关闭自动根证书更新”选项允许您禁用通过 Windows 更新站点自动更新根证书。默认情况下,未配置此策略,Windows 始终尝试自动更新根证书。
您还可以使用 certutil 下载更新的受信任根证书列表,并将其本地存储在组策略指定的路径中。
注册表值:
HKLMSOFTWARE\Policies\Microsoft\SystemCertificates\AuthRoot!DisableRootAutoUpdate
值 1 表示禁用受信任 CTL 的 Windows 自动更新。
HKLM\SOFTWARE\Policies\Microsoft\SystemCertificates\AuthRoot!EnableDisallowedCertAutoUpdate
值为 1 表示启用不受信任的 CTL 的 Windows 自动更新。
HKLM\SOFTWARE\Microsoft\SystemCertificates\AuthRoot\AutoUpdate!RootDirUrl
配置共享位置(HTTP 或文件路径)。
可能值得一提的是,这不包括 CRL/AIA 访问。
答案2
Greg Askew 的回答为这个问题提供了线索。以下是 powershell 代码中的答案:
new-item hklm:\SOFTWARE\Policies\Microsoft\SystemCertificates\AuthRoot -ItemType Container
set-itemproperty HKLM:\SOFTWARE\Policies\Microsoft\SystemCertificates\AuthRoot -Name DisableRootAutoUpdate -Value 1
我在两台服务器上进行了测试,并解决了两台服务器上的问题。