WCF с WSHttpBinding, Message Security, clientCredentialType = "UserName" Определенная проблема SelfHosted - PullRequest
3 голосов
/ 22 декабря 2010

Я создал Службу, где мне нужен клиент для передачи учетных данных (имя пользователя и пароль). Для этого поведения требуется сертификат X509, поэтому я начал с проблем с разработкой самозаверяющего сертификата, используя makecert.exe.

Поскольку я новичок в работе с сертификатами, я вижу, что этот сертификат создан в разделе «Сертификаты сервера IIS», и мне нужно, чтобы моя служба позднее размещалась в службе Windows самостоятельно, для целей тестирования я использую консольное хост-приложение и простой клиент winform app.

Итак, мой вопрос: как мне развернуть этот сертификат? Я не хочу использовать IIS в любом случае, я могу встроить сертификат, где я заметил, что я могу экспортировать как файл .pfx в хосте службы консоли / Windows? И как?

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

Конфигурация сервера:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="B2B.WCF.Service.B2BService" behaviorConfiguration="wsBehavior">
        <endpoint name="WSHttpEndpointB2B"
                  bindingConfiguration="WSBinding"
                  address ="http://localhost:8768/ServB2B"
                  binding="wsHttpBinding"
                  contract="B2B.WCF.Contracts.IB2BContracts">
        </endpoint>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="wsBehavior">
          <serviceMetadata httpsGetEnabled="false"/>
          <serviceDebug includeExceptionDetailInFaults="true" />
          <serviceCredentials>
            <serviceCertificate findValue="MyServerCert" x509FindType="FindBySubjectName" 
                                storeLocation="LocalMachine" storeName="My" />
            <userNameAuthentication userNamePasswordValidationMode="Custom" 
                                    customUserNamePasswordValidatorType="B2B.WCF.Service.UserValidator, B2B.WCF.Service" />
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <wsHttpBinding>
        <binding name="WSBinding">
          <security mode="Message">
            <message clientCredentialType="UserName" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
  </system.serviceModel>
</configuration>

Конфигурация клиента:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <client>
      <endpoint name="WSHttpEndpointB2B"
                bindingConfiguration="WSBinding" behaviorConfiguration="wsBehavior"
                address ="http://localhost:8768/ServB2B"
                binding="wsHttpBinding"
                contract="B2B.WCF.Contracts.IB2BContracts">
        <identity>
          <dns value="MyServerCert"/>
        </identity>
      </endpoint>
    </client>
    <behaviors>
      <endpointBehaviors>
        <behavior name="wsBehavior">
          <clientCredentials>
            <clientCertificate findValue="MyServerCert" x509FindType="FindBySubjectName"
                                storeLocation="LocalMachine" storeName="My"/>
            <serviceCertificate>
              <authentication certificateValidationMode="None"/>
            </serviceCertificate>
          </clientCredentials>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <bindings>
      <wsHttpBinding>
        <binding name="WSBinding">
          <security mode="Message">
            <message clientCredentialType="UserName" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
  </system.serviceModel>
</configuration>

Спасибо заранее

1 Ответ

3 голосов
/ 22 декабря 2010

Ваши сертификаты необходимо импортировать в хранилище сертификатов Windows на машине, на которой размещен ваш веб-сервис (например, «сервер»), и (необязательно) на машине, на которой используется ваш веб-сервис (то есть «клиент»)если это другой компьютер).

Для этого следует использовать консоль управления Microsoft (MMC).Во-первых, вы должны настроить его в соответствии с этой статьей.Затем импортируйте свои сертификаты в соответствии с шагами, изложенными в этой статье.Убедитесь, что вы выбрали правильное хранилище для сертификата клиента (например, «Личный») и корневого сертификата (например, «Доверенные корневые центры сертификации»).

Ваша веб-служба не запустится, если не найдет правильные сертификаты, которыессылки в ваших файлах конфигурации.В вашем случае это сертификат "MyServerCert", который вы хотите сохранить в личном хранилище.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...