跳过导航 →

SSL证书

Charles会为网站生成自签名证书,这些证书使用Charles根证书进行签发(v3.10后每个安装实例会生成唯一根证书)。由于该根证书不在系统受信任列表中,浏览器或其他应用接收时会显示安全警告。详见SSL代理

您可以选择在遇到每个站点证书时单独永久信任,此时无需信任Charles根证书。若希望自动信任所有Charles签发的证书,请按以下步骤操作。

以下为不同浏览器/应用的配置指南,通过信任Charles根证书可消除证书警告。

注意:Charles 3.10版本后根证书机制有变,若您曾为旧版本配置过,需重新操作。

Windows / Internet Explorer

在Charles中进入Help菜单,选择"SSL Proxying > Install Charles Root Certificate"。系统将提示CA根证书不受信任。

点击"Install Certificate"启动证书导入向导。必须将证书导入"受信任的根证书颁发机构"存储,需手动覆盖自动选择的存储位置。

完成向导后根证书即安装完成。可能需要重启IE生效。

Mozilla Firefox

首先确保Firefox已连接Charles,能在Charles中看到浏览记录。

访问https://chls.pro/ssl,勾选"信任此CA识别网站"选项完成导入。

macOS

在Charles中通过Help > "SSL Proxying > Install Charles Root Certificate"打开钥匙串访问。找到"Charles Proxy..."条目双击,展开"信任"选项,将"使用此证书时"从"使用系统默认"改为"始终信任"。关闭窗口时需输入管理员密码更新系统设置。

可能需要重启Safari生效。

iOS设备

  • 在设置 > Wi-Fi中配置HTTP代理指向Charles
  • Safari访问https://chls.pro/ssl安装证书
  • iOS 10.3+需在设置 > 通用 > 关于 > 证书信任设置中启用Charles证书完全信任(iOS 10变更说明)
  • 配置完成后即可通过Charles代理访问SSL网站

Charles 3.11.4+支持App Transport Security(ATS)。

iOS模拟器

退出模拟器,在Charles中选择Help > "SSL Proxying > Install Charles Root Certificate in iOS Simulators"。该操作会为所有模拟器安装根证书,启动后即可代理SSL流量。

tvOS

需通过App Store下载Apple Configurator 2配置:

  • 创建新描述文件
  • 添加全局HTTP代理负载:手动类型,填写Charles所在主机的地址端口
  • 添加证书负载:在Charles中通过Help > SSL Proxying保存.cer格式根证书,在配置工具中添加该文件

部署描述文件到Apple TV后,进入设置 > 通用 > 关于 > 证书启用信任。

Android

Android N起需修改应用配置才能信任Charles证书,这意味着仅能代理您控制的应用。

添加网络安全配置文件,允许调试版本信任用户安装的CA证书(如Charles根证书)。生产版本仍使用默认信任配置。

创建res/xml/network_security_config.xml:

<network-security-config>...</network-security-config>

在manifest中引用:

<manifest...><application android:networkSecurityConfig="@xml/network_security_config"...>

Google Chrome

macOS系统请参照前述macOS指南,本段仅适用于Windows。

在Charles中保存二进制格式(.cer)根证书,Chrome设置 > 高级 > 管理证书 > 受信任根证书颁发机构 > 导入该文件。

Java应用

将Charles根证书添加到Java信任库(需在Java升级后重复操作):

保存Base64编码(.pem)证书,使用keytool导入$JAVA_HOME/jre/lib/security/cacerts(默认密码changeit)。Windows需管理员权限运行命令。

macOS浏览器Java插件需额外导入/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security/cacerts。

Python

requests模块需单独配置信任Charles证书:

session = Session()
session.verify = "charles-ssl-proxying-certificate.pem"

(感谢Felipe Ferri提供的示例代码)