因此,我们将 ADFS 代理与 ADFS(Install-WebApplicationProxy)连接起来,两者都是 Windows Server 2019。必须重新建立信任,但它要等待很长时间,重试身份验证
AD FS 事件日志
ADFS 端发生事件 276,其值很奇怪:
联合服务器代理无法向联合服务进行身份验证。用户操作确保代理受联合服务信任。为此,请使用证书使用者名称中标识的主机名登录代理计算机,然后使用 Install-WebApplicationProxy cmdlet 在代理和联合服务之间重新建立信任。
附加数据
证书详细信息:
主题名称: 指纹:
不早于时间:
未过时间:
由于代理每隔约 20 秒就会重试身份验证,因此会产生大量此类事件。但是 Install-WebApplicationProxy 之后生成的第一个事件是 395:
使用帐户“example\administrator”成功建立了联合服务器代理和联合服务之间的信任。
代理信任证书主题:CN=ADFS ProxyTrust - ADFSproxy。代理信任证书指纹:3F5DBD1C735A57C5FEA8C18905EE83CEAE3EA732 显然我的凭证是正确的,证书可以传送到 ADFS。我使用 certlm.msc 验证了它 - 证书位于 AdfsTrustedDevices 下
SChannel 日志
我在 ADFS 和 ADFS 代理上都看到以下事件:
事件 36867:
创建 TLS 客户端凭证。
但是对于 ADFS 代理也存在警告,事件 ID 36857:
远程服务器已请求 TLS 客户端身份验证,但找不到合适的客户端证书。将尝试匿名连接。此 TLS 连接请求可能会成功或失败,具体取决于服务器的策略设置。
AD FS 跟踪
已打开调试日志。
ADFS:
多个事件 107 错误:
ProxyRequestHandler.DefaultExceptionHandler:无法验证 ProxyTrust 的主体名称为“”且指纹为“”的证书。
异常详细信息:异常:未找到与请求关联的客户端证书。 StackTrace:位于 Microsoft.IdentityServer.Web.Proxy.TlsRequestVerificationMethod.VerifyTrustedRequest(WrappedHttpListenerContext context,String& auditInformation)位于 Microsoft.IdentityServer.Web.Rest.RestRequestHandler.OnGetContext(WrappedHttpListenerContext context)
检索代理配置时出错。Microsoft.IdentityServer.WebHost.Proxy.ProxyTrustException:未找到与请求关联的客户端证书。位于 Microsoft.IdentityServer.Web.Proxy.TlsRequestVerificationMethod.VerifyTrustedRequest(WrappedHttpListenerContext context、String& auditInformation)位于 Microsoft.IdentityServer.Web.Rest.RestRequestHandler.OnGetContext(WrappedHttpListenerContext context)
TlsRequestVerificationMethod:传入请求不包含证书。
ADFS 代理。
事件 54:
Found certificate matching thumbprint '3F5DBD1C735A57C5FEA8C18905EE83CEAE3EA732'
事件 52 错误:
配置请求失败,状态为:ProtocolError 消息:远程服务器返回错误:(401)未经授权。异常:System.Net.WebException:远程服务器返回错误:(401)未经授权。位于 System.Net.HttpWebRequest.GetResponse() 位于 Microsoft.IdentityServer.Management.Proxy.StsConfigurationProvider.GetStsProxyConfiguration(X509Certificate2 trustCert)
尝试随机事物
- 已禁用 TLS1.3(2019 年没有此功能)https://jaapwesselius.com/2022/01/19/adfs-web-application-proxy-configuration-wizard-fails-with-trust-certificate-error/
- 已启用 TLS 1.0、1.1(之前仅配置了 1.2)
- .NET 注册表项用于启用强加密,但缺失。已添加。+ 设置默认 TLS 1.2
- 使用注册表将 winHTTP 默认协议设置为 TLS1.2
- 两台服务器均已安装最新的 CU 2024-03
- 检查 adfsproxy 上生成的证书是否具有 adfssrv、appproxyctrl 和 appproxysvc 服务帐户的私钥读取权限。
总的来说,证书似乎已传送至 ADFS,但客户端身份验证失败。
我对 ADFS 代理/Web 应用程序代理的内部原理了解不多——希望有人能指导我如何进一步排除故障。现在我们必须忍受一些停机时间 :(
PS 如果有人建议重新建立信任 - 我正在尝试这样做。这些事件是作为该过程的一部分生成的。它失败了:尝试从联合服务器检索配置数据时发生错误。无法检索 pro...
PPS 可能是某些配置阻止了 AdfsTrustedDevices 中的证书用于客户端身份验证?PSADFS ProxyTrust - ADFSproxy
证书没有任何增强密钥用法 - 但我检查了其他正在运行的代理服务器,也没有。它怎么会信任这个自签名证书?ADFS 是否隐式信任 AdfsTrustedDevices 中的自签名证书?
答案1
因此,ADFS 似乎正在使用一种名为 SendTrustedIssuerList 的东西:管理客户端身份验证的受信任发行者并使用 AdfsTrustedDevices 信任 adfs 代理服务器客户端身份验证证书。
当需要使用 SSL 或 TLS 对客户端计算机进行身份验证时,可以配置服务器以发送受信任证书颁发者列表。此列表包含服务器将信任的证书颁发者集,并提示客户端计算机在存在多个证书时应选择哪个客户端证书。此外,客户端计算机发送到服务器的证书链必须根据配置的受信任颁发者列表进行验证。
它无法信任该证书,因为我手动删除了绑定 hostnameport=adfs.example.com:443 并在没有参数的情况下重新添加sslctlstorename=AdfsTrustedDevices
。
我不得不:
netsh http delete sslcert hostnameport=adfs.example.com:443
netsh http add sslcert hostnameport=adfs.example.com:443 certhash=<thumb> appid={5d89a20c-beab-4389-9447-324788eb944a} certstorename=MY ccs=AdfsTrustedDevices
经验教训:如果 AD FS 管理控制台的证书续订没有重新绑定证书,use netsh http update sslcert