Настройте WCF с подписью сертификата клиента XMLDsig, WS-Security или XADES - PullRequest
1 голос
/ 12 марта 2020

Используя VS2019, ASP. NET запущенный проект. net 4.0.

Я создал клиент soap, добавив ссылку на службу в файл wsdl. Сейчас я настраиваю сертификат и вызывает метод.

Этот способ работал на старом сервере soap, но теперь сервер soap изменился. Я тестировал с SoapUI, используя ту же конфигурацию Basi c Auth и отлично работает, но не с моим клиентом. Net 4.0 ...

Web.config

<system.serviceModel>
<bindings>
  <customBinding>
     <binding name="PLATAFORMA">
  <textMessageEncoding messageVersion="Soap11WSAddressing10" />
  <security 
    authenticationMode="MutualCertificateDuplex" 
    messageProtectionOrder="SignBeforeEncrypt"
    messageSecurityVersion="WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10">
    <secureConversationBootstrap />
  </security>
      <httpsTransport />
    </binding>
  </customBinding>
</bindings> 
  <behaviors>
    <endpointBehaviors>
      <behavior name="CERT">
        <clientCredentials>
          <clientCertificate findValue="ClientCert" storeLocation="CurrentUser" storeName="My" x509FindType="FindBySubjectName" />
            <serviceCertificate>
              <defaultCertificate findValue="*.ServerCert.com" storeLocation="CurrentUser" storeName="My" x509FindType="FindBySubjectName" />
            </serviceCertificate>
          </clientCredentials>  
      </behavior>
    </endpointBehaviors>
  </behaviors>
  <client>
    <endpoint
      address="endpointURI"
          binding="customBinding"
          bindingConfiguration="PLATAFORMA"
      behaviorConfiguration="CERT"
      contract="ServiceReference1.RequestPort1"
      name="Request.Request1">
      <identity>
        <dns value="*.ServerCert.com" />
      </identity>
    </endpoint>
  </client>
</system.serviceModel>

XML Outoing header (перехватывается с помощью intercerptor):

<s:Envelope xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <a:Action s:mustUnderstand="1">peticionSincrona</a:Action>
    <a:MessageID>urn:uuid:e3a5c4bd-f159-48c1-8f3f-cf22da6b7e3b</a:MessageID>
    <ActivityId CorrelationId="035f2491-0772-4b1e-a286-9be30720d5ea" xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">4d7f76c2-0486-4a81-93ad-32aecf02b035</ActivityId>
    <a:ReplyTo>
      <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
    </a:ReplyTo>
    <VsDebuggerCausalityData xmlns="http://schemas.microsoft.com/vstudio/diagnostics/servicemodelsink">uIDPo9ph/BcvvnBFuLQYdch+LyYAAAAAHsOKxYeqzk+Do5pQmamNIPUdiXOiYjpBl1dsV5pp+SMACQAA</VsDebuggerCausalityData>
  </s:Header>

Я понимаю, что требуется некоторая информация, как я могу указать, что нужно подписать XMLDsig? почему не мыло / конверт / кодировка? Мне нужна помощь для настройки клиента soap.

Ошибка возврата сервера 500 с ошибкой tomcat по умолчанию, даже не soapenv: ошибка или подобное. Я думаю, что конверт запроса не генерируется должным образом.

РЕДАКТИРОВАТЬ : Должно быть над мылом11

1 Ответ

1 голос
/ 13 марта 2020

Это конфигурация клиента, сгенерированная после изменения сервера SOAP? Если для этого требуется аутентификация Basi c, почему нам не нужно указывать имя пользователя / пароль, а нужно просто предоставить сертификат клиента (в соответствии с типом привязки)? Я предлагаю вам заново сгенерировать клиентский прокси-класс, добавив ссылку на сервис. это также создает правильную конфигурацию в файле webconfig.
Кроме того, поскольку сервер изменяется, сертификат сервера, используемый для обеспечения безопасности HTTPS, также может измениться, поэтому следует также изменить сертификат по умолчанию, который мы предоставляем на стороне клиента. .

<serviceCertificate>
              <defaultCertificate findValue="*.ServerCert.com" storeLocation="CurrentUser" storeName="My" x509FindType="FindBySubjectName" />
            </serviceCertificate>

Для проверки подлинности на основе взаимного сертификата требуются доверительные отношения между клиентом и сервером.

<security 
    authenticationMode="MutualCertificateDuplex"

Нам нужно не только установить сертификат клиента на новом сервере, чтобы доверяя клиенту, нам также необходимо установить сертификат сервера на стороне клиента. Для получения подробной информации,
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/transport-security-with-certificate-authentication
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/message-security-with-a-certificate-client
Не стесняйтесь, дайте мне знать, если есть что-то, с чем я могу помочь.

...