Закрепление сертификата на UWP - PullRequest
0 голосов
/ 12 сентября 2018

У нас есть проект Xamarin.Forms, который в настоящее время компилируется для Android, iOS и UWP с использованием .NET Standard 2.0 для общего проекта.

Обмен данными осуществляется через WCF Договор на обслуживание.

Чтобы закрепить сертификат, мы реализовали следующий код в соответствии с примерами.Это работает правильно на Android и iOS после того, как вы убедитесь, что используете необходимые реализации HttpClient в своих свойствах проекта.

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
ServicePointManager.ServerCertificateValidationCallback = ValidateServerCertificate;

private bool ValidateServerCertificate(object sender,
                                       X509Certificate certificate,
                                       X509Chain chain,
                                       SslPolicyErrors sslPolicyErrors)
{
    // Make sure we have a certificate to check.
    if (certificate == null)
    {
        return false;
    }

    if (sslPolicyErrors != SslPolicyErrors.None)
    {
        return false;
    }

    return this.KnownKeys.Contains(certificate.GetCertHashString(), 
                                   StringComparer.Ordinal);
}

UWP однако оказывается довольно упрямым.Я не могу заставить перезвонить на любой стадии связи.

Я также пытался реализовать наш собственный X509CertificateValidator и передать его в конфигурацию WCF, однако это тоже ничего не делает.

Вопросы

  1. Нужно ли / Могу ли я указать реализацию HttpClient в UWP так же, как вы можете Android и iOS что это исправит?
  2. Есть ли другой подход, который я сейчас упускаю?

1 Ответ

0 голосов
/ 13 сентября 2018

Я бы посоветовал вам использовать HttpBaseProtocolFilter Class в Windows.Web.Http Namespace в вашем приложении UWP. С экземпляром HttpBaseProtocolFilter вы можете подписаться на событие HttpBaseProtocolFilter.ServerCustomValidationRequested . В этом обработчике событий вы можете выполнить дополнительную проверку (в дополнение к настройкам ОС по умолчанию) SSL-сертификата сервера.

...