Для настройки 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>
Спасибо, всё получилось