为什么我的证书没有在请求中发送?

Why is my certificate not being send in the request?

我正在调用一个网络服务,需要提供一个客户端认证证书。但出于某种原因,我无法弄清楚为什么在服务器请求时不发送证书。

我针对绑定和行为的所有可能设置尝试了来自多个论坛的不同建议。但是无论我在 Wireshark 中检查 "Certificate" 数据包时尝试过什么,证书部分都是空的。

我为服务器 (.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 服务时,我收到一个安全协商异常 "Could not establish secure channel for SSL/TLS with authority",据我所知,这是证书未发送的结果。当我与邮递员通话时,它成功了。

我有 postman 和我的应用程序的 wireshark 输出 here。 查看邮递员输出,您会看到第 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