Как игнор самостоятельно подписанные сертификаты с Системы.Чистая.Протоколу HTTP.С помощью HttpClient в Универсальное приложение для Windows


Я создаю переносимую библиотеку классов, что означает, что я должен использовать System. Net. Http. HttpClient для вызова моих веб-API, насколько я понимаю. Проблема заключается в том, что для моего универсального приложения Windows я не могу понять, как игнорировать ошибку, которая возвращается из-за того, что сервер API может иметь самозаверяющий сертификат. Любые предложения будут высоко оценены.

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

1 6

1 ответ:

Не вариант, так как System.Net.ServicePointManager.CertificatePolicy недоступен в UWP. Если вы используете Windows.Web.Http.HttpClient вместо этого, то вы можете игнорировать самозаверяющие сертификаты.

Обновление:

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

Два варианта:

  • Установите его с помощью API:

    IBuffer buffer = await FileIO.ReadBufferAsync(file);
    Certificate rootCert = new Certificate(buffer); 
    CertificateStore rootStore = CertificateStores.TrustedRootCertificationAuthorities;
    rootStore.Add(rootCert);
    
  • Включите его в свой пакет .appxmanifest > декларации > сертификаты > Добавить и установить:

    • имя магазина: root
    • содержимое: путь к файлу сертификата

При любом из обоих вариантов вы перестанете получать:

System. Net. WebException: базовое соединение было закрыто: не удалось установить доверительные отношения для безопасного канала SSL / TLS. ---> Система.Безопасность.Идентификация.AuthenticationException: удаленный сертификат недействителен в соответствии с процедура валидации.