在Android开发中,调试HTTPS流量或测试安全功能时,经常需要安装自定义证书。尤其对于抓包分析和本地测试,通过ADB安装证书是最直接的方式。但实际操作中,很多新手会遇到证书格式错误、权限不足、安装失败等问题。本文就来分享完整的操作流程和常见问题解决方法。

背景与痛点

为什么需要手动安装证书?Android系统默认只信任预置CA机构的证书,而开发过程中我们可能需要:

  • 调试HTTPS请求(如Charles/Fiddler抓包)
  • 测试自签名证书的兼容性
  • 验证企业内部分发的私有证书

常见问题包括:

  • 证书格式不被Android识别
  • ADB push时提示权限拒绝
  • 证书安装后仍显示"不受信任"
  • 不同Android版本证书存储路径差异

证书安装流程

完整操作流程

1. 生成CA证书

推荐使用OpenSSL生成自签名证书(需提前安装OpenSSL):

# 生成私钥
openssl genrsa -out myCA.key 2048

# 生成根证书(有效期365天)
openssl req -x509 -new -nodes -key myCA.key -sha256 -days 365 -out myCA.pem

2. 转换证书格式

Android需要DER格式的证书文件:

openssl x509 -in myCA.pem -outform DER -out myCA.der

3. 传输证书到设备

通过ADB将证书推送到系统目录:

adb push myCA.der /sdcard/

4. 安装证书

进入ADB shell完成安装(需Android 7+):

adb shell
su  # 需要root权限
mv /sdcard/myCA.der /system/etc/security/cacerts/
chmod 644 /system/etc/security/cacerts/myCA.der

ADB操作示例

常见问题解决

  1. 权限不足错误
  2. 方案:先执行adb root获取root权限
  3. 或使用adb remount重新挂载系统分区

  4. 证书不受信任

  5. 检查证书是否在/system/etc/security/cacerts/目录
  6. 确认文件名后缀是.der而非.pem

  7. Android 10+无法安装

  8. 新版Android限制系统证书修改
  9. 临时方案:通过设置→安全→安装证书(用户级)

安全注意事项

  • 生产环境避免使用自签名证书
  • 测试完成后及时移除测试证书
  • 不要将私钥文件留在设备中
  • 考虑使用Android Keystore系统管理证书

验证安装结果

查看证书是否生效:

adb shell
ls -l /system/etc/security/cacerts/ | grep myCA

或者在浏览器访问https://crt.sh查看证书链。

最佳实践建议

  1. 为不同环境维护独立的证书
  2. 使用脚本自动化安装流程
  3. 在AndroidManifest中配置网络安全策略
  4. 考虑使用Android模拟器进行证书测试

延伸学习:

实践任务:

  1. 尝试为你的开发设备安装抓包工具证书
  2. 编写Shell脚本自动化证书安装流程
  3. 测试不同Android版本的证书兼容性
Logo

音视频技术社区,一个全球开发者共同探讨、分享、学习音视频技术的平台,加入我们,与全球开发者一起创造更加优秀的音视频产品!

更多推荐