首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCF证书链信任认证:“调用方没有通过服务进行身份验证。

WCF证书链信任认证:“调用方没有通过服务进行身份验证。
EN

Stack Overflow用户
提问于 2011-09-07 06:28:05
回答 2查看 7.4K关注 0票数 6

在与WCF服务通信时,我希望使用基于证书的加密和验证。因此,我创建了测试证书,"TempCA“作为我的根CA,"SignedByCA”作为由该CA签名的客户端证书。

当我将客户端证书放入“本地计算机\受信任的人”并使用certificateValidationMode="PeerTrust"时,服务会识别客户端,一切都按预期工作。但是,通过信任链验证(certificateValidationMode="ChainTrust"),我遇到了“调用方没有通过服务进行身份验证”的错误。

相关服务器端配置:

代码语言:javascript
复制
<behaviors>
      <serviceBehaviors>
        <behavior name="customServiceBehavior">
            [...]
            <serviceCredentials>
                <clientCertificate>
                    <authentication certificateValidationMode="ChainTrust" trustedStoreLocation="LocalMachine" mapClientCertificateToWindowsAccount="false"  />
                </clientCertificate>
                <serviceCertificate findValue="TempCA"
                                    storeLocation="LocalMachine"
                                    storeName="My"
                                    x509FindType="FindBySubjectName" />
            </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
        <wsHttpBinding>
            <binding name="soapBindingConfiguration">
                <security mode="Message">
                    <message clientCredentialType="Certificate" />
                </security>
            </binding>
        </wsHttpBinding>
    </bindings>

相关客户端配置 (rest自动创建,由“添加服务引用”):

代码语言:javascript
复制
<endpointBehaviors>
    <behavior name="customClientBehavior">
        <clientCredentials>
            <clientCertificate findValue="SignedByCA" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName" />
        </clientCredentials>
    </behavior>
</endpointBehaviors>

客户端和服务器证书都以私钥存储在“本地计算机\Personal”中(因为我正在一台计算机上进行测试),"TempCA“(我的根证书)也存储在”本地计算机\受信任的根证书颁发机构“中。

我在这里错过了什么?有什么有用的例子吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-08 10:54:43

我终于发现了问题所在。撤销检查必须被禁用。我的测试CA显然没有相关的CRL,因此在这种情况下,WCF似乎阻止了每个客户端,因为它无法被验证。

代码语言:javascript
复制
<clientCertificate>
    <authentication certificateValidationMode="ChainTrust"
                    revocationMode="NoCheck" ←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←
                    [...]  />
</clientCertificate>
票数 5
EN

Stack Overflow用户

发布于 2011-09-07 12:57:33

看起来,您所做的工作应该基于这篇MSDN文章,在WCF中使用证书。使用受信任的根证书方法时,您可能希望从个人存储中删除证书。

如果这也不起作用,那么部署根证书还需要将组策略应用到您的计算机上。查看这篇TechNet文章。的“如果您不使用Microsoft证书颁发机构并且只想要一组计算机”部分,它指出,如果没有应用组策略,计算机可能不会自动信任根证书。这两篇文章似乎相互矛盾,所以我不确定哪一篇会有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7329711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档