Android Emulator"链接验证失败"将开发人员计算机与自签名证书连接起来

GPG*_*GVM 28 ssl android ssl-certificate android-emulator

我有一个android工作室项目,调用基于Web的api服务.当服务代码在dev,qa,prod等中时,没有证书问题,但是当试图访问web api开发人员框以测试新功能/错误修复/等时,我得到:

因错误而无法回复:

javax.net.ssl.SSLHandshakeException:链验证失败

在com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:361)

我有从服务开发者机器导出的自签名证书,没有私钥DER编码.我掉到了模拟器上并"安装"但这没有用.

我使用了相同的证书并复制到模拟的SD卡.然后从模拟器中的安全设置安装.结果相同.链验证失败.

现在我的安全/证书知识非常基础.我认为错误实际上描述了这个问题.自签名证书中没有链条......但我可能错了.

无论如何,我该如何解决这个问题?

我希望能够运行我的android代码并点击开发人员框进行测试/调试等.

我已经阅读了这样的帖子,只是为了拥有企业环境,我正在阻止开放SSL等网站.

https://android.stackexchange.com/questions/61540/self-signed-certificate-install-claims-success-but-android-acts-as-if-cert-isn

我通过WebView访问该服务.

任何帮助,指针,想法将不胜感激.

TIA

Dig*_*iro 90

导致此问题的原因可能是设备的错误日期时间

  • 详细说明一下,模拟器默认设置为自动设置时间,但它只是偶尔检查当前时间;如果您暂停模拟器并在几周内偶尔启动它,则时钟很容易不同步。要强制它检测正确的当前时间,您必须重新启动操作系统。(Android虚拟设备管理器中的“冷启动”) (4认同)
  • 那是疯狂的愚蠢的东西,但这就是原因 (2认同)
  • 很好,这就是我的案例的问题。 (2认同)

Mit*_*ora 16

如果调用HTTPS API并且设备日期时间不正确,就会出现这种异常。

这意味着连接证书无效,因为日期时间不正确。这就是 SSL 握手失败的原因。

解决方案:处理 API 的异常并向用户显示 toast/snackbar/page 以更改设备日期时间。

例外情况:

javax.net.ssl.SSLHandshakeException: Chain validation failed
...
Caused by: java.security.cert.CertificateException: Chain validation failed
...
Caused by: java.security.cert.CertPathValidatorException: timestamp check failed
...
Caused by: java.security.cert.CertificateNotYetValidException: Certificate not valid until Thu Aug 26 05:30:00 GMT+05:30 2021 (compared to Wed Mar 16 17:03:55 GMT+05:30 2016)
...
Run Code Online (Sandbox Code Playgroud)


Cal*_*len 15

我得到了

javax.net.ssl.SSLHandshakeException: Chain validation failed
Run Code Online (Sandbox Code Playgroud)

java.security.cert.CertPathValidatorException: Response is unreliable: its validity interval is out-of-date
Run Code Online (Sandbox Code Playgroud)

对我有用的解决方案是通过虚拟设备管理器 - >操作下拉菜单 - >冷启动立即强制冷启动模拟器

  • 刚刚重启模拟器也没用。我必须使用“立即冷启动”技巧。谢谢! (4认同)

vov*_*ost 7

只需重新启动模拟器即可解决此错误.长按仿真器菜单中的" 关闭电源"按钮,然后选择" 重新启动".