我们有一个Xamarin.Forms
项目,当前使用共享项目的.NET Standard 2.0为Android
,iOS
和UWP
进行编译。
通信通过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
配置的问题,但是它也无能为力。
问题
HttpClient
下指定一个UWP
实现,就像可以解决此问题的Android
和iOS
一样?答案 0 :(得分:1)
我建议您在UWP应用的HttpBaseProtocolFilter中使用Windows.Web.Http Namespace类。使用HttpBaseProtocolFilter实例,您可以订阅HttpBaseProtocolFilter.ServerCustomValidationRequested事件。在此事件处理程序中,您可以执行服务器SSL证书的额外验证(除了操作系统默认设置以外)。