突然在我的Xamarin Android应用程序中出现“Error:TrustFailure(身份验证或解密失败)”。

问题描述:

突然之间,我的应用程序在通过https调用REST API时开始出现此错误。我正在研究一个添加了Intent的mod以处理某个文件扩展名的打开文件,但我怀疑这是否是原因。突然在我的Xamarin Android应用程序中出现“Error:TrustFailure(身份验证或解密失败)”。

相反,问题是类似这样的: Invalid certificate received from server

我的证书也被魔岛,自今年四月已安装完毕。禁用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我检查了绑定,并没有任何问题,它说,证书是'ok'当我查看证书路径状态时。

我在使用实际设备时出现错误,而不是仿真器。

任何帮助表示赞赏。

*****更新

我叫Comodo的支持,并发现了问题是与Android的证书存储不是最新的,使用旧的遗留SHA。因此认证路径2以“额外下载”状态回到客户端。假设在我的服务器中有一个名为'COMODO RSA证书颁发机构'的证书在2036年到期,这会干扰'COMODO RSA证书颁发机构'中间证书到2020年到期。以下是该证书的详细信息:

[Root] Comodo RSA证书颁发机构(SHA-2) 序号:4c:aa:f9:ca:db:63:6f:e0:1f:f7:4e:d8:5b:03:86:9d发行机构:C = GB,ST =大曼彻斯特,L =索尔福德,O = COMODO CA有限公司,CN = COMODO RSA认证机构
有效性(过期):1月18日23:59:59 GMT 2038

然而,在这两个我找不到了本地计算机和当前用户。由于这是一个VPS /虚拟机,问题可能在于主机可能将此虚拟网络通信/响应添加到客户端。现在的问题是托管公司不想禁用主机中的证书。

+0

如果您提供您尝试访问的域名,以便实际检查证书的状态并帮助您找到问题的原因,可能会有帮助。在硬件升级的上下文中可以进行各种配置更改,这可能会影响某些TLS客户端,但不会影响其他客户端,如使用SNI或缺少链式证书的要求。 –

+0

SSL检查器对证书有何评论? https://www.sslchecker.com/sslchecker –

+0

肯,谢谢你提到sslchecker.com - 我进入我的网站域名,并说“供应商签名:否 - SSL不受信任”,并显示链中的3个证书是缺失:COMODO RSA域验证安全服务器CA,COMODO RSA证书颁发机构和AddTrust External CA Root。我从Comodo的支持网站(https://support.comodo.com/index.php?/comodo/Knowledgebase/文章/视图/ 979/108/domain-validation-sha-2)并将它们导入服务器,然后再次检查sslchecker,但它仍然表示同样的事情,我甚至在IIS中重新启动了网站和应用程序池。 – ncruz

我明白了。正如我在上面的更新中提到的那样,问题在于Android的证书存储不是最新的,而是使用旧的旧式SHA。因此认证路径2以“额外下载”状态回到客户端。 2036年有一个名为'COMODO RSA认证机构'的证书会干扰'COMODO RSA证书颁发机构'中级证书到2020年到期。我已经删除了它,这就是为什么我再也找不到它了。

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

这里有证书的细节来禁用/删除:

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

序列号:4C:AA:F9:CA:分贝:63 :6f:e0:1f:f7:4e:d8:5b:03:86:9d

发行人:C = GB,ST =大曼彻斯特,L =索尔福德,O = COMODO CA有限公司,CN = COMODO RSA认证授权

有效期限:1月18日23:59:59 2038 GMT

新的证书是:

comodorsadomainvalidationsecureserverca.crt

comodorsaaddtrustca.crt

addtrustexternalcaroot.crt

我找不到,我下载了所有三个,魔岛技术支持页面代表帮助我导航到此页面。

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

导入新证书并重新启动。

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