0

为什么我会收到此错误,这到底是什么意思?除了不匹配的证书设置之外,还有其他可能吗?

我有一个本地运行的单元测试,它在我们的数据中心命中 ADFS 代理以进行 Active Federation,然后命中在 Azure 中运行的 WCF Web 服务(Web 角色)。客户端出错并出现 MessageSecurityException。所以查看服务器的服务日志,它记录了异常:

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'd 到一个 Azure 实例从那里拉来确认它真的是我认为的那样):

<serviceCertificate>
    <certificateReference findValue="D4ECD7FF6A551FAA040BA0B62B77B8EA0F11CD16" storeLocation="LocalMachine" storeName="My" x509FindType="FindByThumbprint" />
</serviceCertificate>

我已确认这些证书已安装在我的本地计算机(单元测试)和 Azure 服务器(Web 服务服务器)上。而且我什至已经确认指纹是我的配置中的内容。我让这一切都在本地环境中成功运行。唯一的区别是证书、URI 和 Azure 的引入。

我仔细检查了其他一些事情:

  1. 不,我没有复制/粘贴带有 unicode 字符的指纹。我正在为我的服务重复使用我的 SSL 证书,并且 SSL 工作得很好,所以它不是指纹中的错字。
  2. 该证书没有旧版本或替代版本可能会让我感到困惑。就像我说的那样,每次确保安装它时,我一直在检查证书的指纹(在 MMC -> Certs 中)。
4

1 回答 1

0

最终,ADFS 配置错误,不知何故这是由此产生的错误。错误配置是由于我的联合服务名称不是解析到 ADFS 代理的主机名(只是 ADFS 服务器本身)。围绕我们的公共代理的主机名重新构建我们的 ADFS 设置为我们解决了这些问题。

我怀疑这在 Azure 之外不是问题的原因是联合服务名称解析到内部服务器而不是外部代理,并且 Azure 只能访问外部代理。

Either way, moral of the story (that nearly nobody seems to talk about) is that your Federation Service Name must be a public URI if you expect to ever use a Proxy with it, and that Proxy must resolve to that public URI!

于 2012-11-12T15:33:55.480 回答