Как принять самозаверяющий SSL-сертификат в клиенте WCF? - PullRequest
9 голосов
/ 12 февраля 2011

Это может быть глупый вопрос, но я просто не могу найти ответ.

Что я хотел бы сделать: у меня есть служба WCF, размещенная IIS.Он работает отлично, я могу получить доступ к wsdl, у меня есть самозаверяющий сертификат для сервера и т. Д. Я хотел бы вызвать эту службу из клиента WPF.

Проблема в том, что у меня есть selfподписанный сертификат, я получаю следующее исключение при вызове службы: Не удалось установить доверительные отношения для безопасного канала SSL / TLS с полномочиями 'localhost'.

Если я захожу на сайт (или службы) из браузера, это не проблема, потому что браузер предупреждает меня о сертификате и в любом случае дает мне возможность просмотра страницы.Но клиент WPF просто выдает исключение.

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

Может кто-нибудь предоставить код для этого?Если бы вы наткнулись на хороший, подробный учебник по этому поводу, он тоже был бы потрясающим.(Видите, моя проблема с учебниками, которые я нашел, заключается в отсутствии деталей)

Ответы [ 2 ]

15 голосов
/ 27 апреля 2012

Вот минимальный объем кода, необходимый для того, чтобы клиент WCF мог принять произвольный сертификат.Это небезопасно .Используйте только для тестирования.Не вините меня, если этот код сходит с ума и съедает вашего маленького котенка.

ServicePointManager.ServerCertificateValidationCallback +=
            new System.Net.Security.RemoteCertificateValidationCallback(EasyCertCheck);

Перезвоните:

bool EasyCertCheck(object sender, X509Certificate cert,
        X509Chain chain, System.Net.Security.SslPolicyErrors error)
{
    return true;
}

Код беззастенчиво поднят из наименее полезного ответа на Можно ли заставить тестовый клиент WCF принять самозаверяющий сертификат?

6 голосов
/ 12 февраля 2011

Вы можете зарегистрировать сертификат самостоятельно.Если вы также загрузите сертификат в клиенте, а затем зарегистрируете его как доверенный, вы не должны получать это предупреждение.

Вам нужно найти X509CertificateCollection и добавить сертификат в эту коллекцию.У меня возникла такая проблема с SmtpClient, работающим через Ssl.

Путем перехвата System.Net.ServicePointManager.ServerCertificateValidationCallback или реализации System.Net.ICertificatePolicy и определения моего собственного установленного сертификата как действительного / доверенного (присоединенного к System.Net.ServicePointManager.CertificatePolicy).

Это не материал WCF как таковой, но, насколько я могу судить, это также должно относиться и к WCF.Все зависит от того, что WCF использует под капотом.

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