gpt4 book ai didi

android - 通过 HTTPS 的 Xamarin Android Web 服务

转载 作者:太空狗 更新时间:2023-10-29 13:55:55 25 4
gpt4 key购买 nike

我在使用仅通过 https 可用的 Web 服务时遇到了一些困难。

我已经阅读了其他几个人的帖子,他们也遇到了实现此问题的问题,但到目前为止我看到的答案都没有解决我的问题,所以我会尝试在这里解释我的问题并希望有人你们知道如何克服这个障碍。

我正在使用专门为 Android 开发的 Xamarin Studio 6.1.1。我已将项目的“Android Build”下的“HttpClient Implementation”设置为“AndroidClientHandler”(这似乎是最新的实现,应该支持 TLS 1.2)。

我已经向 Web 服务添加了一个 Web 引用(不是 WCF),并在出现提示时提供了登录信息...到目前为止,一切都按预期进行。

注意:我已经从 Visual Studio 中的控制台应用程序测试了 Web 服务,它按预期工作。

但是,当我尝试调用 Web 服务的一种方法时,我得到了同样的错误,我可以看到很多其他人在我之前遇到过这个错误:TrustFailure(身份验证或解密失败。) ".

我已经尝试了几个以前发布的解决方案,但似乎没有任何帮助。

1.A) 为ServicePointManager提供回调函数:

ServicePointManager.ServerCertificateValidationCallback += CertificateValidationCallBack;

1.B) 回调函数:

private static bool CertificateValidationCallBack(
object sender,
System.Security.Cryptography.X509Certificates.X509Certificate certificate,
System.Security.Cryptography.X509Certificates.X509Chain chain,
System.Net.Security.SslPolicyErrors sslPolicyErrors)
{
// If the certificate is a valid, signed certificate, return true.
if (sslPolicyErrors == System.Net.Security.SslPolicyErrors.None)
{
return true;
}

// If there are errors in the certificate chain, look at each error to determine the cause.
if ((sslPolicyErrors & System.Net.Security.SslPolicyErrors.RemoteCertificateChainErrors) != 0)
{
if (chain != null && chain.ChainStatus != null)
{
foreach (System.Security.Cryptography.X509Certificates.X509ChainStatus status in chain.ChainStatus)
{
if ((certificate.Subject == certificate.Issuer) &&
(status.Status == System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.UntrustedRoot))
{
// Self-signed certificates with an untrusted root are valid.
continue;
}
else
{
if (status.Status != System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoError)
{
// If there are any other errors in the certificate chain, the certificate is invalid,
// so the method returns false.
return false;
}
}
}
}

// When processing reaches this line, the only errors in the certificate chain are
// untrusted root errors for self-signed certificates. These certificates are valid
// for default Exchange server installations, so return true.
return true;
}
else
{
// In all other cases, return false.
return false;
}
}

2) 创建 AesCryptoServiceProvider 实例:

System.Security.Cryptography.AesCryptoServiceProvider b = new System.Security.Cryptography.AesCryptoServiceProvider();

如果有人能解决这个看似很普遍的问题,请不要犹豫告诉我,我只有这么多头发......

亲切的问候,艾达尔

最佳答案

可能是已知错误。在此处搜索“https”:https://releases.xamarin.com

[Mono], [Xamarin.iOS], [Xamarin.Android], [Xamarin.Mac] – 43566 – “TrustFailure (The authentication or decryption has failed.) … Invalid certificate received from server.” with “Error code: 0x5” or “Error code: 0xffffffff800b010f” when attempting to access HTTPS servers on ports other than 443

错误引用:https://bugzilla.xamarin.com/show_bug.cgi?id=44708

关于android - 通过 HTTPS 的 Xamarin Android Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39745975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com