You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android自定义证书信任锚问题排查求助

排查方向整理
  • 检查证书文件格式与完整性

    • 确认/raw目录下的chain1、chain2为PEM格式(需包含-----BEGIN CERTIFICATE-----和-----END CERTIFICATE-----首尾标记),避免使用DER或其他非文本格式。
    • 用openssl verify -CAfile root.crt chain1.pem命令验证证书链完整性,确保Root、Inter、终端证书按顺序完整包含,无遗漏或顺序错误。
  • 修正network_security_config.xml语法错误

    • 当前配置中cleartextTrafficPermitted="true"的写法不符合XML规范,正确写法应为:
      <base-config cleartextTrafficPermitted="true">
      
    • 确认AndroidManifest.xml中正确引用配置:<application android:networkSecurityConfig="@xml/network_security_config" ...>,确保配置文件路径(res/xml/)与引用一致。
  • 区分构建时与运行时的证书信任逻辑

    • 若报错来自构建过程中Gradle的远程请求(如拉取依赖、Remote Config),此时使用的是JDK证书库,而非应用的network security config。需在gradle.properties中配置代理信任的证书:
      systemProp.javax.net.ssl.trustStore=/path/to/your/cacerts.jks
      systemProp.javax.net.ssl.trustStorePassword=changeit
      
    • 确保JDK的cacerts文件已正确导入企业Root、Inter证书。
  • 简化证书信任配置测试

    • 由于两条链共享Root和Inter证书,可尝试只信任Root证书:
      <trust-anchors>
          <certificates src="system"/>
          <certificates src="@raw/root_cert"/>
      </trust-anchors>
      
    • 若仍失败,可单独添加Inter证书至trust-anchors,验证是否存在中间证书信任缺失。
  • 适配Android版本差异

    • 对于Android 7.0(API 24)及以上版本,手动添加的证书需指定user="true"属性才能生效:
      <certificates src="@raw/chain1" user="true"/>
      
    • 分别测试API 23及以下、API 24及以上设备,排查版本兼容性问题。
  • 启用调试日志定位问题

    • 在AndroidManifest.xml中开启调试:<application android:debuggable="true" ...>
    • 使用以下命令查看日志:
      adb logcat -d | grep "NetworkSecurityConfig"  # 确认配置加载状态
      adb logcat -d | grep "CertPathValidator"      # 获取证书验证失败细节
      
  • 验证代理SSL握手细节

    • 用openssl命令查看代理返回的证书链:
      openssl s_client -connect target-host:443 -proxy proxy-host:proxy-port
      
    • 确认返回的证书链与本地配置一致,同时检查设备是否支持代理使用的EC加密套件。

内容的提问来源于stack exchange,提问作者Strider

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 08:48:29