Когда вы заходите на сайт HTTPS, вы, вероятно, получаете диалоговое окно с вопросом, хотите ли вы доверять сертификату, предоставленному веб-сервером.Таким образом, ответственность за принятие сертификата несет пользователь.Давайте вернемся к сценарию веб-службы, если вы хотите вызвать веб-службу, расположенную на веб-сервере, который использует SSL и HTTPS, существует проблема.
Когда вы совершаете вызов из кода, диалоговое окно не появляется и спрашивает, доверяете ли вы сертификату ;возможно, вы получите следующее исключение:
Произошло необработанное исключение типа 'System.Net.WebException' в system.dll
Дополнительная информация: Основное соединение было закрыто: Возможноне устанавливать доверительные отношения с удаленным сервером.
Но есть решение этой проблемы, вы можете решить это в своем коде, создав собственный класс CertificatePolicy (который реализует интерфейс ICertificatePolicy
).В этом классе вам нужно написать свою собственную функцию CheckValidationResult, которая должна возвращать true или false, как если бы вы нажимали да или нет в диалоговом окне.Для целей разработки я создал следующий класс, который принимает все сертификаты, поэтому вы больше не получите неприятного WebException:
public class TrustAllCertificatePolicy : System.Net.ICertificatePolicy
{
public TrustAllCertificatePolicy()
{}
public bool CheckValidationResult(ServicePoint sp, X509Certificate cert,WebRequest req, int problem)
{
return true;
}
}
Как видите, функция CheckValidationResult всегда возвращает true, поэтому все сертификаты будутбыть доверенным.Если вы хотите сделать этот класс немного более безопасным, вы можете добавить дополнительные проверки, например, с помощью параметра X509Certificate.Чтобы использовать этот CertificatePolicy, вы должны указать ServicePointManager использовать его:
System.Net.ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy();
Это необходимо сделать (один раз в течение жизненного цикла приложения) перед выполнением вызова веб-службы.