繁体   English   中英

如何信任 Android 上的自签名证书?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM