gpt4 book ai didi

c# - 带相互身份验证的 WCF

转载 作者:太空宇宙 更新时间:2023-11-03 14:34:45 24 4
gpt4 key购买 nike

我正在尝试帮助解决用 WCF 编写的需要相互身份验证的第三方自托管 Web 服务。问题是 Web 服务返回 401 Unauthorized。我已经阅读了几篇关于如何在 WCF 中编写客户端和服务器部分以使用相互身份验证的文章,但我仍然有以下问题:

  1. 客户端发送客户端证书后,WCF 服务如何确定是否接受它作为可以访问给定资源的经过身份验证的端点。证书是否只需要被能够在证书存储中找到证书的根 CA 作为受信任的根 CA 的服务信任,或者是否有某种机制将证书映射到已被识别为允许的实体列表访问资源?

  2. 通常,当我看到使用相互身份验证时,在 Wireshark 中,我看到服务器使用服务器问候、证书和证书请求来响应客户端问候和证书请求。但是,在我进行故障排除的情况下,我没有看到服务器发送证书请求。我相信客户端正在以加密数据发送其证书,但我无法解密数据以查看它。有没有办法强制 WCF 服务发送带有服务器问候的证书请求?

配置文件有以下内容:

<bindings>
<webHttpBinding>
<binding name="webHttpTransportSecurity">
<security mode="Transport">
<transport clientCredentialType="Certificate" />
</security>
</binding>
</webHttpBinding>
</bindings>

我相信这足以表明客户端应该使用证书进行身份验证,但现在服务如何决定该证书是否是允许的?

最佳答案

您的 binding 定义看起来是正确的。证书在 endpointBehaviors 中定义。它有点难以理解,因为它被拆分成单独的 XML 组。

这里是我的项目的一个例子:

<client>
<endpoint address="(address to our)WebService.svc"
behaviorConfiguration="behaviorConfig"
binding="webHttpTransportSecurity"
bindingConfiguration="bindingConfig"
contract="((your contract name))"
name="mainEndPoint">
<identity>
<certificateReference findValue="CN=((cert name like blah.blah.blah-blah.blah)), OU=((lookup)), O=((lookup))"
storeLocation="LocalMachine"
storeName="TrustedPeople"
x509FindType="FindBySubjectDistinguishedName" />
</identity>
</endpoint>
</client>
<bindings>
<!-- you already have a good looking binding (above) -->
</bindings>
<behaviors>
<serviceBehaviors ...etc />
<endpointBehaviors>
<behavior name="behaviorConfig">
<clientCredentials>
<clientCertificate findValue="CN=((short name)), OU=((lookup)), O=((lookup))"
storeLocation="LocalMachine"
storeName="My"
x509FindType="FindBySubjectDistinguishedName" />
<serviceCertificate>
<defaultCertificate findValue="CN=((same content from certificateReference above)), OU=((lookup)), O=((lookup))"
storeLocation="LocalMachine"
storeName="TrustedPeople"
x509FindType="FindBySubjectDistinguishedName" />
<authentication certificateValidationMode="PeerTrust"
revocationMode="NoCheck"
trustedStoreLocation="LocalMachine" />
</serviceCertificate>
</clientCredentials>
<callbackTimeouts />
</behavior>
</endpointBehaviors>
</behaviors>

关于c# - 带相互身份验证的 WCF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49057733/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com