WCF https & netsh add sslcert
От: fortnum  
Дата: 21.08.15 08:27
Оценка:
Вроде как везде пишут, чтобы построить на WCF свой standalone HTTPS-сервер, надо все сделать для WCF, как полагается, но в дополнение еще использовать команду ОС netsh add sslcert (в WinXP вместо нее использовалась HttpConfig.exe), где указать какой именно сертификат надо привязать к предполагаемому для использования HTTPS-сервером порту.

Для HTTPS в WCF используется класс SslStream, который является оберткой над SSPI операционки. И в этом примере, который использует SslStream напрямую (без WCF), получается использование netsh add sslcert вовсе необязательно

Тот же самый порт: если я запускаю сервер на WCF (webHttpBinding, security mode="Transport", transport clientCredentialType="None") — для его работы обязательно необходимо исполнить netsh add sslcert на этот порт. А серверу из вышеуказанного примера netsh этот как-то побоку. Как так получается? Нельзя ли сделать так, чтобы и WCF'овскому серверу netsh был пофиг?

PS. Когда мы указываем в конфигурации WCF — <serviceBehaviors><behavior><serviceCredentials><serviceCertificate ... /></serviceCredentials></behavior></serviceBehaviors> — это ведь не значит, что именно этот сертификат будет использован для согласования SSL/TLS соединения. А использоваться будет тот сертификат, отпечаток которого был указан при вызове netsh add sslcert.

При использовании SslStream сертификат SSL/TLS порта указывается прямо при вызове метода sslStream.AuthenticateAsServer(certificate, ... ). Может, и в WCF как-то так можно сделать?

PPS. Я вообще взаимную аутентификацию в SSL/TLS пытаюсь произвести <transport clientCredentialType="Certificate"/>. Как я написал в соседней теме
Автор: fortnum
Дата: 20.08.15
, у меня сервер почему-то не все установленные на нем корневые сертификаты высылает клиенту (из которых клиент может выбрать, и если выберет произвести ответную аутентификацию). Так вот, оказывается, если к netsh add sslcert не добавить clientcertnegotiation=enable, то WCF'овский сервер не вышлет списка сертификатов вообще, независимо от того, что у него в настройках стоит clientCredentialType="Certificate". Хотелось бы понять, можно ли как-то уйти в WCF от этой зависимости от netsh? А то в примере, использующем SslStream напрямую, такой зависимости нет — там вообще netsh можно не использовать. Если вызвать sslStream.AuthenticateAsServer(certificate, true, ...), то и список допустимых CA назад приходит. Хоть и такой же неполный.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.