【发布时间】:2017-01-06 00:21:16
【问题描述】:
Android 7 对证书的处理方式进行了一些更改 (http://android-developers.blogspot.com/2016/07/changes-to-trusted-certificate.html),不知何故我无法让我的 Charles 代理继续工作。
我的 network_security_config.xml:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config>
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
<debug-overrides>
<trust-anchors>
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
我正在调试模式下运行。但无论如何,我得到javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.。
不用说,我确实从Settings -> Security -> Install from storage 安装了pfx 证书。证书显示在 User Credentials 中,但不在 Trusted credentials -> User 中。在我的棒棒糖设备上,证书列在那里。
我使用 okhttp3 作为 HTTP 库。
知道我做错了什么吗?
【问题讨论】:
-
作为一项快速测试,尝试将
user添加/移动到<base-config>中,看看是否会发生变化。不应该,但只需片刻即可尝试。 -
您不需要在developer.android.com/training/articles/security-config.html 中为 Charles 添加显式 CA:“信任其他 CA”,因为 Charles CA 是自生成的,不会在 Android 系统信任链中?
-
@Morisson Chang:我不想将 Charles CA 嵌入到应用程序中,我希望能够像以前那样在我的开发手机上手动添加它。来自
Settings -> Security -> Install from storage -
1.您如何在应用的 AndroidManifest.xml 中引用 network_security_config.xml? 2. 请链接 .pfx 文件好吗?我认为它只包含 CA 证书(没有私钥),因此应该可以发布。我问是因为,如果 .pfx 包含私钥,它将被假定为客户端证书文件,因此文件中的 CA 不会被安装为受信任的服务器身份验证。
-
@AlexKlyubin 欢呼,它现在正在工作:)。我想我需要重新启动我的查尔斯或应用程序或其他任何东西。我很困惑,因为在 nougat 之前我已经在无数的 android 设备上安装了相同的 .pfx 文件,并且它们被识别出来了。但现在一切都很好。你能写一个答案让我批准吗?
标签: android ssl android-7.0-nougat