我正在调用一个web服务,需要为客户端身份验证提供证书。但由于某种原因,我无法理解为什么当服务器请求证书时不发送证书
我尝试了来自几个论坛的关于绑定和行为的所有可能设置的不同建议。但无论我在Wireshark中检查"证书"数据包时尝试了什么,证书部分都是空的。
我为服务器(.cer(和客户端(.pfx(创建了一个证书请参阅zip文件。在服务器上,.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服务时,我会收到一个安全协商异常"无法通过权威机构为SSL/TLS建立安全通道",据我所知,这是证书未发送的结果。当我和邮递员打电话时,成功了。
我在这里有邮递员和我的应用程序的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());
在第二条线路上,连接失败。
终于解决了这个问题。另一方需要信任来自我们客户端证书的根CA