如何信任 Android 上的自签名证书?
Posted
技术标签:
【中文标题】如何信任 Android 上的自签名证书?【英文标题】:How to trust self signed certificate on Android? 【发布时间】:2016-09-13 21:33:14 【问题描述】:我已经为我的服务器生成了自签名证书。 然后通过设置 -> 安全 -> 安装将其添加到 android。
当我尝试从应用程序连接到我的服务器时出现错误:
java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
据我了解,在将证书添加到受信任的列表后,它应该可以正常工作。我错过了什么吗? 思路是通过Android系统添加证书,无需修改应用代码。
顺便说一句,我正在使用OkHttpClient
进行网络连接。也许我应该为https
连接启用一些东西?
【问题讨论】:
可能重复:***.com/questions/25509296/… 不,不是。我不想信任所有证书... 你导入CA证书了吗? 是的,正如我通过设置所说的那样 -> 安全 看看这里,它描述了如何解决这个异常:developer.android.com/training/articles/… 【参考方案1】:对 Android 来说,重要的是,当您生成自签名证书时,将其标记为证书颁发机构,以便授权它对证书进行认证——即使只是对自己进行签名并证明它就是它自己。
这是在 basicConstraints
扩展中完成的,声明 CA:TRUE
而不是默认的 CA:FALSE
。当您导入如此标记的证书时,Android 会将其视为用户安装的根证书,您应该能够在 Credential storage → Trusted 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://***.com/a/70543735/1542667
先加入网络安全配置,再加入okhttp客户端。
【讨论】:
以上是关于如何信任 Android 上的自签名证书?的主要内容,如果未能解决你的问题,请参考以下文章