C# Azure中的WCF声称我有证书不匹配,但我没有';我想我不会
为什么我会出现这个错误,它到底意味着什么?除了不匹配的证书设置之外,还有其他原因吗 我有一个本地运行的单元测试,它在我们的数据中心点击一个ADFS代理进行活动联合,然后点击在Azure中运行的WCF web服务(web角色)。客户端出错,出现MessageSecurityException。因此,查看服务器的服务日志,它会记录异常:C# Azure中的WCF声称我有证书不匹配,但我没有';我想我不会,c#,wcf,.net-4.0,azure,C#,Wcf,.net 4.0,Azure,为什么我会出现这个错误,它到底意味着什么?除了不匹配的证书设置之外,还有其他原因吗 我有一个本地运行的单元测试,它在我们的数据中心点击一个ADFS代理进行活动联合,然后点击在Azure中运行的WCF web服务(web角色)。客户端出错,出现MessageSecurityException。因此,查看服务器的服务日志,它会记录异常: Cannot resolve KeyInfo for decryption: KeyInfo 'SecurityKeyIdentifier ( Is
Cannot resolve KeyInfo for decryption: KeyInfo 'SecurityKeyIdentifier
(
IsReadOnly = False,
Count = 1,
Clause[0] = EncryptedKeyIdentifierClause(EncryptedKey = abcdefg123456==, Method 'http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p')
)
', available tokens 'System.ServiceModel.Security.AggregateTokenResolver'.
我在网上找到的所有关于这一点的信息都表明,客户端和服务器之间存在证书不匹配的问题。但我已经检查了两次、三次和四次这些证书引用,它们是相同的。客户端(本地单元测试)端点:
<endpoint address="https://mydomain.com/TestService.svc"
binding="customBinding"
bindingConfiguration="WS2007FederationHttpBinding_ISayHelloService"
contract="ActiveFederationHelpers.Tests.ISayHelloService"
name="WS2007FederationHttpBinding_ISayHelloService">
<identity>
<certificateReference findValue="D4ECD7FF6A551FAA040BA0B62B77B8EA0F11CD16"
storeLocation="LocalMachine"
storeName="My"
x509FindType="FindByThumbprint" />
</identity>
</endpoint>
我的服务器的服务配置(我将RDP导入一个Azure实例中,从中提取以确认它确实是我所认为的):
我已确认这些证书已安装在我的本地计算机(单元测试)和Azure服务器(web服务服务器)上。我甚至确认了指纹就是我配置中的指纹。我已经在本地环境中成功运行了所有这些。唯一的区别是证书、URI和Azure的引入
我还仔细检查了一些其他事项:
最终,ADFS被错误配置,不知何故,这就是由此产生的错误。错误配置是由于我的联合身份验证服务名称不是解析到ADFS代理(仅ADFS服务器本身)的主机名。围绕公共代理的主机名重新构建ADFS设置为我们解决了这些问题 我怀疑这在Azure之外不是问题的原因是联合身份验证服务名称解析到了内部服务器,而不是外部代理,Azure只访问了外部代理
不管怎样,这个故事的寓意(几乎没有人谈论)是,如果您希望使用代理,那么您的联邦服务名称必须是一个公共URI,并且该代理必须解析为该公共URI 你能发布一个指向WCF跟踪要点的链接吗?密钥标识符可能不足以让冲突解决程序找到它。换句话说,服务配置了证书这一事实并不总是足以让它知道如何使用证书。
<serviceCertificate>
<certificateReference findValue="D4ECD7FF6A551FAA040BA0B62B77B8EA0F11CD16" storeLocation="LocalMachine" storeName="My" x509FindType="FindByThumbprint" />
</serviceCertificate>