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
sServerCertificateCustomValidationCallback
。如果是这样的话,我敢肯定我们确实试过了,但没有效果。@HappyNomad谢谢你,而不是ServicePointManager.ServerCertificateValidationCallback
,如何使用System.Net.Http.HttpClient
的ServerCertificateCustomValidationCallback
?@HappyNomad您的意思是HttpClientHandler
sServerCertificateCustomValidationCallback
。如果是这样的话,我敢肯定我们确实试过了,但没有效果。@HappyNomad谢谢