Charles证书过期后,HTTPS抓包功能将无法正常使用,提示SSL Proxying错误。常见问题是:即使重新安装了Charles根证书,移动端或浏览器仍提示证书不受信任。这通常是因为设备系统或浏览器缓存了旧证书,或未正确启用SSL代理。如何清除旧证书并重新安装受信任的Charles新证书,并确保在目标设备上正确配置SSL Proxying?尤其在iOS 15+和Android 10以上系统中,证书安装流程有何变化?
1条回答 默认 最新
祁圆圆 2025-10-09 03:51关注1. 问题背景与核心机制解析
Charles是一款广泛用于移动端和Web开发的HTTP/HTTPS抓包工具,其HTTPS抓包依赖于中间人(MITM)技术。该技术要求设备信任Charles生成的根证书(CA Certificate),否则会触发SSL Proxying错误,导致无法解密HTTPS流量。
当Charles证书过期后,即使重新安装新证书,设备或浏览器仍可能提示“证书不受信任”,这通常由以下原因造成:
- 旧证书未彻底清除,系统或应用缓存仍在使用过期版本
- 新证书未在操作系统级或用户级正确安装并标记为“受信任”
- SSL Proxying未在Charles中启用,或代理配置不完整
- iOS 15+ 和 Android 10+ 加强了证书信任策略,需额外手动授权
因此,解决该问题需从证书生命周期管理、系统级信任配置、代理设置三个维度协同处理。
2. 诊断流程与常见错误场景分析
在实施修复前,应先确认问题根源。以下是典型的诊断步骤:
- 检查Charles是否生成新的有效证书(Help → SSL Proxying → Install Charles Root Certificate)
- 确认目标设备时间是否准确(证书验证依赖系统时间)
- 查看设备是否已安装旧版Charles证书并尝试删除
- 测试是否能通过http://chls.pro/ssl 正常下载证书
- 检查Charles的SSL Proxying设置是否启用了对应域名(Proxy → SSL Proxying Settings)
- 在设备上访问HTTPS网站,观察是否仍出现安全警告
特别注意:现代浏览器(如Chrome)和操作系统已默认禁用用户证书的信任权限,必须显式授权。
3. 各平台证书清理与重装流程对比
平台 证书清理方式 安装路径 信任配置要求 特殊说明 iOS 15+ 设置 → 通用 → 关于本机 → 证书信任设置 → 删除Charles证书 设置 → 已下载描述文件 需在“证书信任设置”中手动启用完全信任 iOS 13起不再自动信任用户证书 Android 10+ 设置 → 安全 → 加密与凭据 → 信任的凭据 → 用户标签页删除 通过浏览器下载.cer文件,选择“VPN和应用”安装 部分厂商ROM需在“应用专属”中授权 Android 7+ 应用可选择是否信任用户证书 Windows certmgr.msc → 受信任的根证书颁发机构 → 删除旧Charles证书 双击.cer文件导入“受信任的根证书颁发机构” 需管理员权限 建议使用PowerShell脚本批量清理 macOS 钥匙串访问 → 登录/系统 → 找到Charles Proxy CA → 删除 钥匙串中右键证书 → 始终信任 需重启Charles并重新安装 macOS Monterey后需系统完整性保护(SIP)调整 4. Charles端配置关键步骤
确保Charles本身配置正确是成功抓包的前提。执行以下操作:
# 启动SSL Proxying Proxy → SSL Proxying Settings → Enable SSL Proxying # 添加需要解密的域名 Add Rule → Host: *.example.com, Port: 443 # 或使用通配符:*.com, *.net 等 # 重新生成并导出新证书 Help → SSL Proxying → Remove Charles Root Certificate Help → SSL Proxying → Install Charles Root Certificate注意:每次更换证书后,Charles会生成新的公钥指纹,设备必须重新下载并安装最新版本。
5. 移动端设备具体操作指南(iOS 15+ 与 Android 10+)
以iOS 15+为例,证书安装流程变化显著:
- 确保设备与电脑在同一网络,配置Wi-Fi代理指向Charles所在主机IP及端口(默认8888)
- 在Safari中访问 http://chls.pro/ssl 下载新证书
- 进入“设置 → 已下载描述文件” → 安装证书
- 安装完成后,进入“设置 → 通用 → 关于本机 → 证书信任设置”
- 找到“Charles Proxy CA”并启用“完全信任”
Android 10+ 操作流程:
- 连接同一Wi-Fi,设置代理为手动,输入Charles主机IP和端口
- 浏览器访问 http://chls.pro/ssl 下载 .cer 证书
- 点击文件 → 选择“VPN和应用”安装(非WLAN)
- 进入“设置 → 安全 → 信任的凭据 → 用户”确认证书存在
- 对于目标App(如自定义WebView),需在AndroidManifest.xml中配置networkSecurityConfig允许用户证书
6. 高级排查:证书指纹校验与MITM原理图示
为验证证书一致性,可通过OpenSSL比对Charles证书指纹:
openssl x509 -in charles-proxy-ssl-proxying-certificate.pem -noout -fingerprint -sha256设备端证书指纹应与Charles生成的一致。若不一致,说明仍使用旧证书。
graph TD A[客户端发起HTTPS请求] --> B[Charles拦截请求] B --> C{是否信任Charles CA?} C -- 是 --> D[Charles作为MITM建立双向SSL连接] D --> E[解密流量并记录] E --> F[转发至目标服务器] C -- 否 --> G[SSL Proxying错误] G --> H[浏览器/系统提示证书不受信任]本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报