![ADFS 上的 HTTPS 连接重置](https://linux22.com/image/771911/ADFS%20%E4%B8%8A%E7%9A%84%20HTTPS%20%E8%BF%9E%E6%8E%A5%E9%87%8D%E7%BD%AE.png)
我在虚拟机中设置了一个 Windows 服务器,并使用仅主机网络作为实验室环境。我在从仅主机网络访问 HTTPS 时遇到问题。我在 Windows Server 2019 上设置了一个域控制器和 ADFS,并使用 ADFS 的自签名证书。以下是我为尝试隔离问题而进行的一些测试。我正在针对元数据 URL /FederationMetadata/2007-06/FederationMetadata.xml 进行测试
- 如果我在虚拟机中打开 IE 并转到 localhost 上的元数据端点,我会收到消息“此站点不安全”,但可以绕过警告并获取元数据。
- 如果我转到仅主机接口 IP,IE 只会显示一条消息“无法安全连接到此页面”,并且无法绕过。
- 如果我从主机 curl 到主机的唯一 IP 地址,并使用 -k 标志朝向端口 443,我就会重置连接。
- 如果我针对主机唯一 IP 上的 80 端口进行 curl 操作,我会得到预期的 404 页面。
- 从主机 Ping 操作正常。
- 从主机 Telnet 到 443 连接
我已禁用 Windows 防火墙。
证书是使用此 powershell 生成的
$selfSignedCert = New-SelfSignedCertificateEx `
-Subject "CN=adfs.samlsecurity.com" `
-ProviderName "Microsoft Enhanced RSA and AES Cryptographic Provider" `
-KeyLength 2048 -FriendlyName 'OAFED SelfSigned' -SignatureAlgorithm sha256 `
-EKU "Server Authentication", "Client authentication" `
-KeyUsage "KeyEncipherment, DigitalSignature" `
-Exportable -StoreLocation "LocalMachine"
因此似乎存在连接,因为我可以获得 HTTP 404 页面,但由于某种原因,我的连接被 443 拒绝。我猜测 Windows 上的 TLS 设置有问题,但我不知道是什么。
答案1
只是想分享我的经验。
我有一个实验室 ADFS,我最近为其分配了一个通配符证书。今天去使用它时,Edge 给了我 ERR_CONNECTION_RESET。ADFS 已启动。DNS 正确。到目前为止一切看起来都正常。我通过 AD FS 管理控制台重新分配了服务通信证书。但仍然收到错误。
您的帖子让我找到了解决方案,我认为是一样的。
由于无法完全匹配名称 (adfs.name.com /= *.name.com),控制台/ADFS 未分配我选择的证书。
运行“netsh http show sslcert”显示所有 3 个条目具有相同的证书指纹,但与我的通配符证书不匹配。然后我运行 Get-AdfsSslCertificate,结果显示相同。然后我运行 Set-AdfsSslCertificate -Thumbprint,将所有 3 个 ADFS 服务与正确的证书对齐,ADFS 恢复正常。
答案2
找到了!查看了 Wireshark 中的数据包。从服务器收到响应的数据包和未收到响应的数据包之间的唯一区别是 TLS 客户端 hello 中 SNI 扩展的使用。
这让我在 Windows Server 中搜索 SNI 和连接重置。结果发现它使用 SNI 功能能够根据 TLS SNI 中的服务器名称提供不同的证书。
默认情况下,ADFS 不会为除 localhost 和 ADFS 的 FQDN 之外的其他服务器名称注册任何后备证书。当我使用 ADFS 的 IP 地址时,没有适用的证书,服务器关闭了连接。
我首先通过使用注册默认证书来解决这个问题
netsh add sslcert ipport=0.0.0.0:442 appid='{<ADFS_GUID>}' certhash=<thumprint without space>
后来我通过将 FQDN 和 IP 添加到 hosts 文件解决了这个问题。