Доверяйте самозаверяющему сертификату для аутентификации сервера (клиент .NET в Windows)

У меня есть приложение .NET, которое подключается к удаленному серверу через SSL. В тестовой среде удаленный сервер использует самозаверяющий сертификат. По умолчанию соединение SSL не работает. Если я установлю сертификат в хранилище доверенных корневых центров сертификации, соединение будет установлено.

Однако, поскольку теперь это доверенный центр сертификации, этот сертификат можно использовать для подписи сертификатов для любого другого сайта, и приложения на моем компьютере, такие как Internet Explorer, будут им доверять. Я хочу, чтобы этому сертификату доверяли для аутентификации определенного веб-сайта, но не доверяли как центр сертификации. Есть ли способ сделать это?


person Alla    schedule 04.04.2012    source источник


Ответы (1)


Вы можете реализовать свой собственный механизм проверки сертификатов, который позволяет дополнительно использовать определенные самозаверяющие или настраиваемые сертификаты.

Взгляните на RemoteCertificateValidationCallback Delegate. В этом обратном вызове вы можете проверить, была ли проверка уже успешной (sslPolicyErrors == SslPolicyErrors.None), тогда вам не нужно ничего делать. В противном случае вы можете проверить данный сертификат, соответствует ли он настраиваемому сертификату, которому вы хотите доверять в этом контексте. Если сертификат совпадает, верните true.

Использование собственного делегата RemoteCertificateValidationCallback может быть выполнено с ориентацией на соединение (например, с помощью этого конструктора SslStream).

person Robert    schedule 04.04.2012
comment
Я скорее хотел избежать каких-либо взломов самозаверяющих сертификатов в коде приложения. - person Alla; 04.04.2012
comment
AFAIK есть только эти два варианта: установить сертификат как доверенный корень или доверять ему вручную с помощью кода. Кстати: не каждый сертификат можно использовать для выдачи других сертификатов в качестве PKI. - person Robert; 04.04.2012