如何用Charles抓取终端请求?SSL验证失败问题排查
问题描述
已为终端设置代理:
http_proxy=http://localhost:8888 https_proxy=https://localhost:8888
执行curl https://google.com时出现错误:
curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to localhost:8888
Charles配置正常,Safari的HTTPS流量可正常显示(已安装Charles根证书),但fastlane使用Faraday获取JSON时出现SSL验证失败错误:
[15:45:56]: SSL_connect SYSCALL returned=5 errno=0 peeraddr=[::1]:8888 state=error: certificate verify failed
[!] SSL_connect SYSCALL returned=5 errno=0 peeraddr=[::1]:8888 state=error: certificate verify failed
解决方案
1. 确保Charles根证书被系统完全信任
Safari正常说明证书已安装,但终端工具依赖的证书存储可能未同步:
- 打开钥匙串访问,找到
Charles Proxy CA证书,右键选择显示简介 - 展开信任选项,设置使用此证书时为始终信任
- 将证书导出为PEM格式:右键证书→导出,格式选
PEM,保存为charles.pem
2. 给终端工具配置证书路径
针对curl
设置环境变量指定CA证书:
export SSL_CERT_FILE=/path/to/charles.pem
测试:
curl https://google.com
针对Ruby/Fastlane/Faraday
- 查看Ruby默认证书文件路径:
ruby -ropenssl -e 'puts OpenSSL::X509::DEFAULT_CERT_FILE' - 将Charles证书内容追加到该文件:
sudo cat /path/to/charles.pem >> $(ruby -ropenssl -e 'puts OpenSSL::X509::DEFAULT_CERT_FILE')
或直接设置Ruby环境变量:
export SSL_CERT_FILE=/path/to/charles.pem
3. 检查Charles代理配置
- 确认开启SSL代理:
Proxy菜单→SSL Proxying Settings,勾选Enable SSL Proxying,添加需要代理的域名(或用*匹配所有) - 确认代理端口正确:
Proxy菜单→Proxy Settings,HTTP和HTTPS端口均为8888,允许本地连接
4. Fastlane专属配置(可选)
若仍报错,可在Fastfile中手动配置Faraday:
conn = Faraday.new(url: '目标接口地址') do |faraday| faraday.proxy 'http://localhost:8888' faraday.ssl.ca_file = '/path/to/charles.pem' end
内容的提问来源于stack exchange,提问作者Lescai Ionel
相关产品推荐
相关产品推荐

