Почему мой сертификат не отправляется в запросе? - PullRequest
0 голосов
/ 06 марта 2020

Я звоню в веб-сервис и мне нужно предоставить сертификат для аутентификации клиента. Но по какой-то причине я не могу понять, почему сертификат не отправляется, когда сервер запрашивает его.

Я пробовал разные предложения на нескольких форумах по поводу всех возможных настроек привязок и поведения. Но что бы я ни пытался при проверке пакета «Сертификат» в Wireshark, часть сертификата остается пустой.

Я создал сертификат для сервера (.cer) и сертификат для клиента (.pfx). См. почтовый файл . На сервере установлен файл .cer, который помечен как действительный сертификат для аутентификации.

Я установил сертификат .pfx в хранилище сертификатов (LocalMachine \ My), пароль - «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>

Когда я звоню в веб-сервис, я получаю securitynegotiationexception «Не удалось установить sh безопасный канал для SSL / TLS с полномочиями», который, насколько я знаю, является результатом того, что сертификат не был отправлен. Когда я звоню почтальону, это удается.

У меня есть вывод wireshark для почтальона и мое приложение здесь . Посмотрев на вывод почтальона, вы увидите, что запрос сертификата сервера в строке 1877 содержит «PVP-SelfSigned-ClientCert-A cc» в качестве приемлемого ЦС. А в строке 2189 мой клиентский сертификат отправляется на сервер.

Но в выводе wireshark при вызове его из моего приложения вы все равно видите, что запрос сертификата сервера в строке 1745 содержит «PVP-SelfSigned-ClientCert- A cc "как приемлемый CA. Но в строке 1959 нет отправляемого сертификата, однако, когда я смотрю на объект запроса при отладке, я вижу, что сертификат есть в моем объекте запроса в "client.ClientCredentials.ClientCertificate"

Последние 5 дней Я искал в inte rnet возможные причины и решения моей проблемы, но мне пока не повезло со всеми предложенными мною предложениями. Я надеюсь, что кто-то с большим опытом может что-то сделать из вывода Wireshark и помочь мне?

Кроме того, в моем. net коде я просто делаю следующее

                var client = new WebserviceTekortkomingClient("IgjEndpoint");
            var response = client.RequestTekortkomingen(new RequestTekortkomingen());

На во второй строке происходит сбой соединения.

1 Ответ

0 голосов
/ 12 марта 2020

Наконец-то понял это. Другая сторона должна была доверять root CA из нашего клиентского сертификата

...