C# UWP上的证书固定

C# UWP上的证书固定,c#,wcf,xamarin.forms,xamarin.uwp,certificate-pinning,C#,Wcf,Xamarin.forms,Xamarin.uwp,Certificate Pinning,我们有一个Xamarin.Forms项目,该项目目前是为Android、iOS和UWP使用.NET标准2.0为共享项目编译的 通过WCF服务合同进行通信 为了锁定证书,我们根据示例实现了以下代码。在确保在其项目属性下使用必要的HttpClient实现后,这在Android和iOS上正常工作 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; ServicePointManager.ServerCertificate

我们有一个
Xamarin.Forms
项目,该项目目前是为
Android
iOS
UWP
使用.NET标准2.0为共享项目编译的

通过
WCF
服务合同进行通信

为了锁定证书,我们根据示例实现了以下代码。在确保在其项目属性下使用必要的
HttpClient
实现后,这在
Android
iOS
上正常工作

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
配置,但这也没有任何作用

问题

  • 我是否需要/我是否能够在
    UWP
    下指定一个
    HttpClient
    实现,就像您为
    Android
    iOS
    所做的那样来解决这个问题
  • 是否有我目前缺少的另一种方法

  • 我建议您使用in-you UWP应用程序中的类。通过该实例,您可以订阅事件。在此事件处理程序中,您可以对服务器SSL证书执行额外的验证(除了操作系统默认值)。

    我建议您在In-you UWP应用程序中使用该类。通过该实例,您可以订阅事件。在这个事件处理程序中,您可以执行额外的验证(除了操作系统默认值之外)服务器SSL证书。

    谢谢,但如果我是正确的,并且没有从这些帖子中转移:然后我无法使用生成的WCF服务合同代码实现我需要的内容,必须直接使用
    HttpClient
    ?有一个示例,其中包括实现证书的详细代码使用
    HttpClient
    ,您可以试一试。是的,谢谢!虽然答案没有完全涵盖我所需要的内容,但您的评论中提到的博客文章确实涵盖了这些内容。谢谢您,但如果我是正确的,并且没有从这些文章中继续下去:然后,我无法使用生成的WCF服务合同代码实现我所需要的内容,必须直接使用
    HttpClient
    ?有一个它包括使用
    HttpClient
    实现证书固定的详细代码,您可以尝试一下。是的,谢谢!虽然答案没有完全涵盖我需要的内容,但您的评论中提到的博文确实包含了这些内容。而不是
    ServicePointManager.ServerCertificateValidationCallback
    ,如何使用
    System.Net.Http.HttpClient
    ServerCertificateCustomValidationCallback
    ?@HappyNomad您的意思是
    HttpClientHandler
    s
    ServerCertificateCustomValidationCallback
    。如果是这样的话,我敢肯定我们确实试过了,但没有效果。@HappyNomad谢谢你,而不是
    ServicePointManager.ServerCertificateValidationCallback
    ,如何使用
    System.Net.Http.HttpClient
    ServerCertificateCustomValidationCallback
    ?@HappyNomad您的意思是
    HttpClientHandler
    s
    ServerCertificateCustomValidationCallback
    。如果是这样的话,我敢肯定我们确实试过了,但没有效果。@HappyNomad谢谢