如何在安卓设备上信任自签名证书?

14

我已为我的服务器生成自签名证书。然后使用“设置”->“安全”->“安装”将其添加到Android中。

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

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

我理解,在将证书添加到受信任列表后,它应该可以正常工作。我有遗漏什么吗? 这个想法是通过Android系统添加证书而不修改应用程序代码。

顺便说一下,我正在使用OkHttpClient进行网络连接。也许我应该启用https连接的某些内容?


可能是重复问题: https://dev59.com/5l8e5IYBdhLWcg3wqryt - shilch
14
不,不是这样的。我不想相信所有证书...... - Orest
你导入了CA证书吗? - shilch
看这里,它描述了如何解决这个异常:https://developer.android.com/training/articles/security-ssl.html#CommonProblems - shilch
阅读这篇文章,可能会对您有所帮助。http://android-developers.blogspot.ru/2012/03/unifying-key-store-access-in-ics.html - Vyacheslav
显示剩余2条评论
3个回答

5

在生成自签名证书时,Android要求标记其为证书颁发机构,以便授权它验证证书 - 即使仅用于签署自身并证明其本身。

这是通过将 "basicConstraints" 扩展中的 "CA:FALSE" 声明为 "CA:TRUE" 来完成的。 导入此类带有标记的证书时,Android将视其为用户安装的根证书,并且您应该能够在“凭据存储”→“受信任的凭据”→“用户”下看到它。

然而,具有此位的证书是一个强大的权限,这种证书过去被恶意工具用于窃取加密用户通信内容。 因此,现在当这种CA证书生效时,Google Play Protect会提示用户注意。


1
你知道在Android 9中是否有所改变吗?我知道过去我曾经设置了“CA:TRUE”并且成功运行,但是在Android 9中,我无法再次运行它了... - eckes
在将CA:FALSE参数更改为CA:TRUE后,Android 11成功导入了localhost.crt,但我仍然遇到了SecurityError:尝试注册服务工作者时发生SSL证书错误。 - Jacob

1

考虑使用 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


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接