突然得到"错误:TrustFailure(身份验证或解密失败。)"在我的Xamarin Android应用程序上

时间:2017-09-06 08:50:48

标签: android ssl xamarin ssl-certificate

突然之间,我的应用程序在通过https调用REST API时开始出现此错误。我正在研究一个mod,它添加了一个Intent来处理某个文件扩展名的打开文件,但我怀疑这是原因。

相反,问题与此类似: Invalid certificate received from server

我的证书也是Comodo的,并且自今年4月开始安装。禁用COMODO RSA证书颁发机构的解决方案无效。

服务器是VPS,主机在此错误开始出现期间进行了硬件升级,但我也不确定这是因为浏览器显示SSL很好而且iOS版本该应用程序的工作正常。

应用程序中调用服务器的代码位于实用程序类中,我根本没有更改该代码。我所做的微小改动是添加一个我随后删除的意图,错误仍然存​​在。

以下是错误消息,包括内部异常和堆栈跟踪:

System.Net.WebExceptionStatus.TrustFailure

ex.InnerException.Message - The authentication or decryption has failed.

ex.InnerException.InnerException.InnerException.Message - Invalid certificate received from server. Error code: 0xffffffff800b010b

ex.InnerException.InnerException.StackTrace
  at Mono.Security.Protocol.Tls.RecordProtocol.EndReceiveRecord (System.IAsyncResult asyncResult) [0x0003a] in /Users/builder/data/lanes/3511/501e63ce/source/mono/mcs/class/Mono.Security/Mono.Security.Protocol.Tls/RecordProtocol.cs:430 
  at Mono.Security.Protocol.Tls.SslClientStream.SafeEndReceiveRecord (System.IAsyncResult ar, System.Boolean ignoreEmpty) [0x00000] in /Users/builder/data/lanes/3511/501e63ce/source/mono/mcs/class/Mono.Security/Mono.Security.Protocol.Tls/SslClientStream.cs:256 
  at Mono.Security.Protocol.Tls.SslClientStream.NegotiateAsyncWorker (System.IAsyncResult result) [0x00071] in /Users/builder/data/lanes/3511/501e63ce/source/mono/mcs/class/Mono.Security/Mono.Security.Protocol.Tls/SslClientStream.cs:418 

ex.InnerException.StackTrace
  at Mono.Security.Protocol.Tls.SslStreamBase.EndRead (System.IAsyncResult asyncResult) [0x00051] in /Users/builder/data/lanes/3511/501e63ce/source/mono/mcs/class/Mono.Security/Mono.Security.Protocol.Tls/SslStreamBase.cs:883 
  at Mono.Net.Security.Private.LegacySslStream.EndAuthenticateAsClient (System.IAsyncResult asyncResult) [0x00011] in /Users/builder/data/lanes/3511/501e63ce/source/mono/mcs/class/System/Mono.Net.Security/LegacySslStream.cs:475 
  at Mono.Net.Security.Private.LegacySslStream.AuthenticateAsClient (System.String targetHost, System.Security.Cryptography.X509Certificates.X509CertificateCollection clientCertificates, System.Security.Authentication.SslProtocols enabledSslProtocols, System.Boolean checkCertificateRevocation) [0x00000] in /Users/builder/data/lanes/3511/501e63ce/source/mono/mcs/class/System/Mono.Net.Security/LegacySslStream.cs:445 
  at Mono.Net.Security.MonoTlsStream.CreateStream (System.Byte[] buffer) [0x0004e] in /Users/builder/data/lanes/3511/501e63ce/source/mono/mcs/class/System/Mono.Net.Security/MonoTlsStream.cs:106 

我使用标准端口443.我检查了绑定并且没有任何问题,它说证书是“好的”#39;当我查看认证路径状态时。

我在使用实际设备时遇到错误,而不是模拟器。

感谢任何帮助。

*****更新

我打电话给Comodo的支持,发现问题在于Android的证书存储不是最新的并使用旧的传统SHA。因此,认证路径2通过“额外下载”回复给客户。状态。据称有一个名为“COMODO RSA认证机构”的证书。我的服务器在2036年到期,干扰了COMODO RSA认证中心'中间证书将于2020年到期。以下是该证书的详细信息:

[根] Comodo RSA认证机构(SHA-2) 序列号:4c:aa:f9:ca:db:63:6f:e0:1f:f7:4e:d8:5b:03:86:9d 发行人:C = GB,ST =大曼彻斯特,L = Salford,O = COMODO CA Limited,CN = COMODO RSA认证机构
有效期(到期):1月18日23:59:59 2038 GMT

但是,我无法在本地计算机和当前用户身上找到答案。由于这是VPS /虚拟机,因此问题可能在于主机可能将其在虚拟网络通信/响应中添加回客户端。现在的问题是托管公司不想在主机中禁用证书。

1 个答案:

答案 0 :(得分:1)

我得到了它的工作。正如我在上面的更新中提到的,问题在于Android的证书存储不是最新的并且使用旧的传统SHA。因此,认证路径2通过“额外下载”回复给客户。状态。有一个名为' COMODO RSA认证中心'在2036年到期,干扰了COMODO RSA认证机构'中间证书在2020年到期。我已经删除了它,这就是为什么我再也找不到它了。

解决方法是找到&禁用或删除此证书,将其替换为从Comodo网站下载的新证书,然后重新启动计算机。

以下是要禁用/删除的证书的详细信息:

[根] Comodo RSA认证机构(SHA-2)

序列号:4c:aa:f9:ca:db:63:6f:e0:1f:f7:4e:d8:5b:03:86:9d

发行人:C = GB,ST =大曼彻斯特,L = Salford,O = COMODO CA Limited,CN = COMODO RSA认证机构

有效期(到期):1月18日23:59:59 2038 GMT

新证书是:

comodorsadomainvalidationsecureserverca.crt

comodorsaaddtrustca.crt

addtrustexternalcaroot.crt

我无法找到我从中下载所有三个页面的页面,Comodo技术支持代表帮助我导航到此页面。

要禁用证书,请从MMC进入证书管理器,右键单击以打开,单击“详细信息”选项卡,单击“编辑属性”按钮,然后在“证书目的”区域中,选择“出于所有目的而禁用”。 #39;无线电选项。

导入新证书并重新启动。

而不是使用SSLChecker,我推荐使用Qualys SSL实验室(https://www.ssllabs.com/ssltest/index.html)进行SSL服务器测试,因为它更加准确。详细。