[英]How to trust self signed certificate on Android?
我已经为我的服务器生成了自签名证书。 然后通过设置 -> 安全 -> 安装将其添加到 Android。
当我尝试从应用程序连接到我的服务器时出现错误:
java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
据我所知,在我将证书添加到受信任列表后,它应该可以正常工作。 我错过了什么吗? 思路是通过Android系统添加证书,不修改应用代码。
顺便说一句,我正在使用OkHttpClient
进行网络连接。 也许我应该为https
连接启用一些东西?
对 Android 而言,重要的是当您生成自签名证书时,将其标记为认证机构,以便授权它认证证书——即使只是对自己进行签名,从而证明它是自己。
这是在basicConstraints
扩展中完成的,声明CA:TRUE
而不是默认的CA:FALSE
。 当您导入如此标记的证书时,Android 会将其视为用户安装的根证书,您应该能够在Credential storage > Trusted credentials > USER下看到它。
然而,具有这一点的证书是一种强大的力量,过去,这种证书已被恶意工具用来监视所谓的加密用户通信。 因此,这些天,当这种 CA 证书生效时,Google Play Protect 将希望与用户进行交流。
考虑使用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
这个例子有两个代码路径https://stackoverflow.com/a/70543735/1542667
首先加入网络安全配置,然后加入okhttp客户端。
您需要使用 keytool 将证书添加到您的 cacerts。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.