【发布时间】:2020-03-12 18:47:51
【问题描述】:
我正在调用 Web 服务,并且需要为客户端身份验证提供证书。但是由于某种原因,我无法弄清楚为什么当服务器请求证书时没有发送证书。
我尝试了几个论坛关于绑定和行为的所有可能设置的不同建议。但是无论我在 Wireshark 中检查“证书”数据包时尝试过什么,证书部分都是空的。
我为服务器 (.cer) 和客户端 (.pfx) 创建了一个证书,请参阅zip file。 在服务器上安装 .cer 文件并将其标记为有效的身份验证证书。
我已在我的证书存储 (LocalMachine\My) 中安装了 .pfx 证书,密码为“pvp”。
我的客户端配置是(我已经尝试了几种不同的设置,结果都一样):
<system.serviceModel>
<client>
<endpoint name="IgjEndpoint"
address="https://tekortkomingen-wvggz.webservices-dbb-acc.igj.nl/"
binding="customBinding"
bindingConfiguration="test"
behaviorConfiguration="IgjEndpointBehaviorConfig"
contract="IGJReference.WebserviceTekortkoming">
</endpoint>
</client>
<bindings>
<customBinding>
<binding name="test">
<textMessageEncoding messageVersion="Soap11WSAddressing10" />
<security authenticationMode="CertificateOverTransport" />
<httpsTransport requireClientCertificate="true" realm="" useDefaultWebProxy="false" />
</binding>
</customBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="IgjEndpointBehaviorConfig">
<clientCredentials>
<clientCertificate storeLocation="LocalMachine" findValue="CN=PVP-SelfSigned-ClientCert-Acc" />
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
当我调用 Web 服务时,我收到一个 securitynegotiationexception “无法为具有权限的 SSL/TLS 建立安全通道”,据我所知,这是未发送证书的结果。当我用邮递员拨打电话时,它会成功。
我有邮递员和我的应用程序here 的wireshark 输出。 查看邮递员的输出,您会看到第 1877 行的服务器证书请求包含“PVP-SelfSigned-ClientCert-Acc”作为可接受的 CA。在第 2189 行,我的客户端证书被发送到服务器。
但是在从我的应用程序调用它时,在wireshark 输出中,您仍然可以看到第1745 行的服务器证书请求包含“PVP-SelfSigned-ClientCert-Acc”作为可接受的CA。 但是在 1959 行没有发送证书,但是当我在调试时查看请求对象时,我看到证书在“client.ClientCredentials.ClientCertificate”下的请求对象中
过去 5 天,我一直在互联网上搜索可能的原因和解决问题的方法,但到目前为止,我尝试过的所有建议都没有运气。 我希望有更多专业知识的人可以从wireshark输出中得到一些帮助并帮助我?
此外,在我的 .net 代码中,我只需执行以下操作
var client = new WebserviceTekortkomingClient("IgjEndpoint");
var response = client.RequestTekortkomingen(new RequestTekortkomingen());
在第二行,连接失败。
【问题讨论】:
-
证书需要在 TLS 握手中发送,而不是在请求中。
-
感谢您的回复,也许我不应该将其称为“我的请求对象”。 client 是我在创建 Web 服务引用时得到的对象。它包含 ClientCredentials 并持有我在端点行为中定义的 ClientCertificate。我希望这会在握手中传递,但事实并非如此。
标签: ssl certificate webservice-client