我有以下情况:
活动目录 1:WCF 客户端、ADFS 2.0 (STS)
Active Directory 2:WCF 服务(依赖方)
我已将 RP 添加到 ADFS,但是当我从 ADFS 请求令牌时,收到以下错误:System.ServiceModel.FaultException: ID3242: 无法对安全令牌进行身份验证或授权。
查看 ADFS 的事件日志,我发现匹配错误:
尝试为指纹“XXXXXXXXXXXX”标识的信赖方信任“http://XXXXXX/Service1/”证书构建证书链时出错。可能的原因是证书已被吊销,无法验证依赖方信任的加密证书吊销设置指定的证书链或证书不在其有效期内。
您可以使用 AD FS 2.0 的 Windows PowerShell 命令来配置依赖方加密证书的吊销设置。信赖方信任的加密证书吊销设置:CheckChainExcludeRoot 构建证书链时发生以下错误:未知错误。未知错误。
User Action: 请确保信赖方信任的加密证书有效且未被撤销。如果吊销设置未指定“无”或“仅缓存”设置,请确保 AD FS 2.0 可以访问证书吊销列表。验证您的代理服务器设置。有关如何验证代理服务器设置的详细信息,请参阅 AD FS 2.0 故障排除指南 (http://go.microsoft.com/fwlink/?LinkId=182180)。
看起来 ADFS 不信任来自 RP 的签名证书(可以理解,颁发签名证书的 CA 位于不同的 AD 中)。CertificateRevokationList 可从两个 Active Directory 访问。
我已将 CA 证书添加到“本地计算机”的受信任根证书中,但我认为问题在于验证机制。
我必须进行哪些配置才能让 ADFS 颁发使用正确证书签名的令牌,或者如何让 ADFS 相信证书有效?
编辑:
我尝试使用 powershell 命令更改吊销检查:
Set-ADFSRelyingPartyTrust -SigningCertificateRevocationCheck CheckEndCert
但没有运气: Set-ADFSRelyingPartyTrust :无法使用指定的命名参数解析参数集。
At line:1 char:26
+ Set-ADFSRelyingPartyTrust <<<< -SigningCertificateRevocationCheck CheckEndCert
+ CategoryInfo : InvalidArgument: (:) [Set-ADFSRelyingPartyTrust], ParameterBindingException
+ FullyQualifiedErrorId : AmbiguousParameterSet,Microsoft.IdentityServer.PowerShell.Commands.SetRelyingPartyTrustC
ommand
编辑2:这有效:
(Get-ADFSRelyingPartyTrust) | Set-ADFSRelyingPartyTrust -EncryptionCertificateRevocationCheck CheckEndCert
但现在我在 Active Directory 1 中的客户抱怨证书......
System.ServiceModel.Security.SecurityNegotiationException:与目标“http://XXXXXXXXXXXXXXXXXX/Service1/”的“http://XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Service1/”的 SOAP 安全协商失败。有关更多详细信息,请参阅内部异常。---> System.IdentityModel.Tokens.SecurityTokenValidationException: X.509 证书 CN=RP-Service 链构建失败。使用的证书具有无法验证的信任链。更换证书或更改 certificateValidationMode。无法将证书链构建到受信任的根颁发机构。