【问题标题】:How to trust self signed certificate on Android?如何信任 Android 上的自签名证书?
【发布时间】:2016-09-13 21:33:14
【问题描述】:

我已经为我的服务器生成了自签名证书。 然后通过设置 -> 安全 -> 安装将其添加到 Android。

当我尝试从应用程序连接到我的服务器时出现错误:

java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

据我了解,在将证书添加到受信任的列表后,它应该可以正常工作。我错过了什么吗? 思路是通过Android系统添加证书,无需修改应用代码。

顺便说一句,我正在使用OkHttpClient 进行网络连接。也许我应该为https 连接启用一些东西?

【问题讨论】:

标签: android ssl ssl-certificate okhttp


【解决方案1】:

对 Android 来说,重要的是,当您生成自签名证书时,将其标记为证书颁发机构,以便授权它对证书进行认证——即使只是对自己进行签名并证明它就是它自己。

这是在 basicConstraints 扩展中完成的,声明 CA:TRUE 而不是默认的 CA:FALSE。当您导入如此标记的证书时,Android 会将其视为用户安装的根证书,您应该能够在 Credential storageTrusted credentials 下看到它>用户

但是,具有此位的证书是一种强大的力量,在过去,这些证书已被邪恶的工具用来监视所谓的加密用户通信。因此,这些天来,当这种 CA 证书生效时,Google Play Protect 将希望与用户交流。

【讨论】:

  • 您知道Android 9 是否改变了这一点?我知道我过去有这个工作(在设置CA:TRUE 之后)但是使用 Android 9,我无法让它运行了......
【解决方案2】:

考虑使用src/debug/xml/network_security_config.xml

它应该类似于:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <debug-overrides>
        <trust-anchors>
            <certificates src="@raw/debug_cas"/>
        </trust-anchors>
    </debug-overrides>
</network-security-config>

其中 debug_cas 是您用来为服务器生成证书的自定义证书颁发机构。请注意,如果您使用通过 IP 访问它的本地服务器,您的服务器证书中必须有一个带有该 IP 的 subjectAltName,否则它会给您一个 javax.net.ssl.SSLPeerUnverifiedException

【讨论】:

    【解决方案3】:

    这个例子有两个代码路径 https://stackoverflow.com/a/70543735/1542667

    先加入网络安全配置,再加入okhttp客户端。

    【讨论】:

      猜你喜欢
      • 2014-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-28
      • 2018-03-10
      • 2016-11-29
      • 2019-09-03
      • 1970-01-01
      相关资源
      最近更新 更多