Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Azure中的WCF声称我有证书不匹配,但我没有';我想我不会_C#_Wcf_.net 4.0_Azure - Fatal编程技术网

C# Azure中的WCF声称我有证书不匹配,但我没有';我想我不会

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

为什么我会出现这个错误,它到底意味着什么?除了不匹配的证书设置之外,还有其他原因吗

我有一个本地运行的单元测试,它在我们的数据中心点击一个ADFS代理进行活动联合,然后点击在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导入一个Azure实例中,从中提取以确认它确实是我所认为的):


我已确认这些证书已安装在我的本地计算机(单元测试)和Azure服务器(web服务服务器)上。我甚至确认了指纹就是我配置中的指纹。我已经在本地环境中成功运行了所有这些。唯一的区别是证书、URI和Azure的引入

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

  • 不,我没有复制/粘贴带有unicode字符的指纹。我正在为我的服务重用我的SSL证书,SSL工作得很好,所以它不是指纹中的一个打字错误
  • 此证书没有可能让我困惑的旧版本或替代版本。正如我所说,每次我确保安装证书时,我都会检查证书的指纹(在MMC->Certs中)

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

    我怀疑这在Azure之外不是问题的原因是联合身份验证服务名称解析到了内部服务器,而不是外部代理,Azure只访问了外部代理


    不管怎样,这个故事的寓意(几乎没有人谈论)是,如果您希望使用代理,那么您的联邦服务名称必须是一个公共URI,并且该代理必须解析为该公共URI

    你能发布一个指向WCF跟踪要点的链接吗?密钥标识符可能不足以让冲突解决程序找到它。换句话说,服务配置了证书这一事实并不总是足以让它知道如何使用证书。
    <serviceCertificate>
        <certificateReference findValue="D4ECD7FF6A551FAA040BA0B62B77B8EA0F11CD16" storeLocation="LocalMachine" storeName="My" x509FindType="FindByThumbprint" />
    </serviceCertificate>