【发布时间】:2019-02-16 17:32:59
【问题描述】:
我们有一个 Xamarin.Forms 项目,当前使用 .NET Standard 2.0 为共享项目编译 Android、iOS 和 UWP。
通过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指定的那样可以解决此问题? - 我目前还缺少其他方法吗?
【问题讨论】:
-
而不是
ServicePointManager.ServerCertificateValidationCallback,用System.Net.Http.HttpClient的ServerCertificateCustomValidationCallback怎么样? -
@HappyNomad 你的意思是
HttpClientHandlersServerCertificateCustomValidationCallback。如果是这样,我很确定我们确实尝试过,但没有效果。 -
@HappyNomad 谢谢
标签: c# wcf xamarin.forms xamarin.uwp certificate-pinning