最近我的Xamarin应用程序停止工作,因为HttpClient的GetAsync方法开始抛出异常“无法建立SSL连接”。内部异常是“SSL错误:1000007d:SSL例程:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED”。
我请求的站点使用ISRG Root X1证书。我设备上的Android 11是最新的,所有浏览器都成功打开请求的URI。站点https://expired-r3-test.scotthelme.co.uk/也说一切正常。
为什么HttpClient现在抛出异常?有办法在我的设备上修复此问题吗?
2条答案
按热度按时间f87krz0w1#
我做了一些调查,首先,我从official site安装了ISRG Root X1证书,它没有帮助。
然后我添加了我自己的HttpClientHandler.ServerCertificateCustomValidationCallback,在HttpClient.getAsync调用工作的Windows 7中,通过参数传递的证书链是正确的:* globusenergo.ru-〉R3-〉ISRG根目录X1 .
在Android链中包含过时的DST Root CA X3证书: globusenergo.ru-〉R3-〉ISRG根目录X1-〉DST根目录CA X3 *。
此外,我尝试了HttpClient和SSL/TLS实现的不同组合,如here所述。没有帮助。
很可能是Xamarin Mono问题据我所知,BoringSsl使用自己证书存储
因此,如果您是站点的所有者,则应更新证书。证书必须包含正确的链,且不引用过期的DST Root CA X3。如果您正在开发应用程序并信任该站点,则可以使用以下代码避免证书验证:
wz8daaqr2#
关于正确设置HttpClient on Android项目(即Xamarin.Android或Uno Platform Droid)的所有信息可以在这里找到:HttpClient Stack and SSL/TLS Implementation Selector for Android。
在Uno平台Droid中,我尝试了两种解决方案(更改Droid项目属性上的设置并实现AndroidClientHandler),两种方案都能正确工作。