如果请求不受信任,Xamarin HttpClient会挂起

时间:2016-05-29 11:50:40

标签: c# xamarin.android asp.net-web-api2

我有一个Web-API服务器,其中包含一些使用自签名SSL证书的功能。我有一个用于Windows和Android应用程序的类库 关于这个类库的重要事项:

ServicePointManager.ServerCertificateValidationCallback += ValidateCert;

方法本身:

private bool ValidateCert(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    var apiCertHash = new byte[]
    {118, 15, 13, 101, 224, 50, 146, 17, 66, 100, 153, 11, 98, 175, 102, 166, 111, 225, 105, 111};

    if (sslPolicyErrors == SslPolicyErrors.None)
    {
        // Good certificate.
        return true;
    }

    bool certMatch = false; // Assume failure
    byte[] certHash = certificate.GetCertHash();

    if (certHash.Length == apiCertHash.Length)
    {
        certMatch = !certHash.Where((t, idx) => t != apiCertHash[idx]).Any();
    }

    return certMatch;
}

所有这一切都适用于我的_httpClient.PostAsync()_httpClient.GetAsync() 但仅限于WINDOWS 。另一方面,在Xamarin.Android中,我无法通过HTTPS访问我的服务器,所有请求都会挂起,直到抛出TaskCancelledException。我可以通过模拟器的浏览器通过HTTP和HTTPS访问我的服务器(我会收到证书警告) AND 通过我的应用程序通过HTTP访问它。当我尝试在Xamarin.Android应用程序中使用HTTPS时,我的ValidateCert未被调用,服务器根本看不到任何请求。该应用具有所有可能的权限。

0 个答案:

没有答案