0

我们有一个Xamarin.Forms当前为.NET Standard 2.0 编译的项目,用于共享项目AndroidiOSUWP

通信是通过WCF服务合同执行的。

为了固定证书,我们按照示例实现了以下代码。这在确保在其项目属性下使用必要的实现时Android和之后都能正常工作。iOSHttpClient

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实现,并且可以解决这个问题?UWPAndroidiOS
  2. 我目前还缺少另一种方法吗?
4

1 回答 1

4

我建议您在 UWP 应用程序的Windows.Web.Http 命名空间中使用HttpBaseProtocolFilter类。使用HttpBaseProtocolFilter实例,您可以订阅HttpBaseProtocolFilter.ServerCustomValidationRequested事件。在此事件处理程序中,您可以执行服务器 SSL 证书的额外验证(除了操作系统默认值)。

于 2018-09-13T03:26:30.093 回答