UWP上的证书固定

时间:2018-09-12 06:47:09

标签: c# wcf xamarin.forms xamarin.uwp certificate-pinning

我们有一个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下指定一个UWP实现,就像可以解决此问题的AndroidiOS一样?
  2. 我目前还缺少另一种方法吗?

1 个答案:

答案 0 :(得分:1)

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