Для настройки WCF сервис через https протокол нам понадобится ssl-сертификат, который можно получить здесь: https://www.sslforfree.com/.

После этого сертификаты нужно преобразовать в pfx-контейнер, для этого существует, как минимум три инструмента:

Для OpenSSL используется следующий синтаксис:
1) openssl pkcs12 -export -out domain.name.pfx -inkey domain.name.key -in domain.name.crt -in intermediate.crt -in rootca.crt

2) Онлайн-версия инструмента OpenSSL: https://www.sslshopper.com/ssl-converter.html

3) certutil –MergePFX certfile.cer certfile.pfx

Поскольку нет возможности указать файл закрытого ключа для параметра –MergePFX, необходимо учитывать следующие требования:

  • Файл закрытого ключа ДОЛЖЕН иметь расширение .KEY;
  • файлы сертификата и закрытого ключа ДОЛЖНЫ иметь одно и то же базовое имя файла (имя файла без расширения);
  • сертификат и файл закрытого ключа должны быть помещены в один каталог.

4) Для pvk2pfx используется следующий синтаксис: pvk2pfx –pvk certfile.pvk –spc certfile.cer –out certfile.pfx

Затем контейнер нужно импортировать в системное хранилище сертификатов (пуск-выполнить-mmc), либо командой certutil -importpfx -p «qwerty» certificate.pfx, где qwerty это заданный вами пароль на шаге сборки pfx-контейнера.

Затем вводим команды в консоли Windows, чтобы привязать сертификат к сетевому порту:

>netsh
netsh>http
netsh http>add sslcert ipport=0.0.0.0:8708 certhash=d0e48edc683d99498ad7330d09cf26fdaa590b02 appid={AD7DA2D4-9B45-487C-8A54-86EF8DAA7A9A}

где d0e48edc683d99498ad7330d09cf26fdaa590b02 это отпечаток (thumbprint) сертификата, а AD7DA2D4-9B45-487C-8A54-86EF8DAA7A9A свежесгенерированный GUIDник.

Настройки в app.config
<service name=»MyService» behaviorConfiguration=»ServiceBehavior»>
     <host>
         <baseAddresses>
             <add baseAddress=»https://site.ru:8708/MyService» />
         </baseAddresses>
     </host>
     <endpoint address=»https://site.ru:8708/MyService» binding=»basicHttpBinding» bindingConfiguration=»mySoapBinding» contract=»myContract» />
</service>

<behavior name=»ServiceBehavior»>
     <serviceDebug includeExceptionDetailInFaults=»False»/>
     <serviceMetadata httpsGetEnabled=»true»/>
</behavior>

<binding name=»mySoapBinding» maxBufferPoolSize=»65536000″ maxBufferSize=»65536000″ maxReceivedMessageSize=»65536000″>
     <readerQuotas maxArrayLength=»65536000″ />
     <security mode=»Transport»>
          <transport clientCredentialType=»None» proxyCredentialType=»None» realm=»» />
          <message clientCredentialType=»Certificate» algorithmSuite=»Default» />
     </security>
</binding>


  1. Сергей Синицын:

    Спасибо, всё получилось