Ubuntu 16.04 通过 apt-get 安装 Charles

Charles 是一款强大的网络调试代理工具, 主要用于监控和调试 HTTP、HTTPS、WebSocket 等协议的网络请求和响应。它通常用于开发和测试 web 应用、移动应用、API 调试等场景。通过 Charles, 开发者可以捕获并分析客户端与服务器之间的网络流量, 查看请求的详细信息 (如请求头、请求体、响应内容、状态码等), 以及模拟和修改请求。

安装 Charles

添加公钥

使用 wget 下载并添加 Charles 的公钥

wget -q -O - https://www.charlesproxy.com/packages/apt/PublicKey | sudo apt-key add -

或者使用 apt-key adv

sudo apt-key adv --keyserver pgp.mit.edu --recv-keys 1AD28806

添加资源库

将 Charles 的 APT 包资源库添加到系统源列表中

sudo sh -c 'echo deb https://www.charlesproxy.com/packages/apt/ charles-proxy main > /etc/apt/sources.list.d/charles.list'

更新源并安装 Charles

更新软件源并安装 Charles

sudo apt-get update
sudo apt-get install charles-proxy

破解 Charles

Charles 在线破解工具
github.com/8enet/Charles-Crack

将下载的 Charles.jar 文件, 替换到安装目录下。默认安装目录在 /usr/lib/charles-proxy/

注意: 为了保险起见先把原始 charles.jar 复制到其他目录, 将破解后的 charles.jar 移动到对应位置, 确保该目录下只有一个 charles.jar 就好了

配置 Charles

生成 SSL 证书

  1. 在 Charles 中, 选择 Help -> SSL Proxying -> Install Charles Root Certificate
  2. 安装后可以在 ~/.charles/ca/ 目录找到两个证书文件
    • charles-proxy-ssl-proxying-certificate.cer
    • charles-proxy-ssl-proxying-certificate.pem

转换证书格式

使用 openssl 转换 PEM 格式为 CRT 格式

openssl x509 -outform der -in charles-proxy-ssl-proxying-certificate.pem -out charles-proxy-ssl-proxying-certificate.crt

添加根证书到系统

注意扩展阅读部分

  1. /usr/share/ca-certificates 下创建一个 charles 目录
  2. 再将转换格式后得到的证书 charles-proxy-ssl-proxying-certificate.crt 复制到 /usr/share/ca-certificates/charles
sudo mkdir /usr/share/ca-certificates/charles
sudo cp ~/.charles/ca/charles-proxy-ssl-proxying-certificate.crt /usr/share/ca-certificates/charles/

更新根证书配置

  1. 编辑 /etc/ca-certificates.conf 文件, 将 charles/charles-proxy-ssl-proxying-certificate.crt 添加到文件末尾

    echo 'charles/charles-proxy-ssl-proxying-certificate.crt' >> /etc/ca-certificates.conf
    
  2. 更新证书配置

    sudo update-ca-certificates
    
  3. 完成后发现 /etc/ssl/certs 目录中应该多了一个 charles-proxy-ssl-proxying-certificate.pem 文件, 表示成功

配置 Charles SSL 代理

  1. 在 Charles 中, 选择 Proxy -> SSL Proxy Settings -> SSL Proxy
  2. 添加一个 Host 为 *, Port 为 443 的 Location 来代理所有 HTTPS 请求

测试代理

设置 Charles 使用 8888 端口 SOCKS 代理, 访问一个网站, 查看是否成功抓取 HTTP 和 HTTPS 请求信息

扩展阅读 - Ubuntu 添加可信任根证书

添加根证书

Ubuntu 下添加根证书非常简单, 只要将证书 (扩展名为crt) 复制到 /usr/local/share/ca-certificates 目录, 并运行 update-ca-certificates

[yaxin@ubox ~]$ sudo cp xinmu.crt /usr/local/share/ca-certificates
[yaxin@ubox ~]$ sudo update-ca-certificates
Updating certificates in /etc/ssl/certs... 1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d....done.

删除根证书

删除证书并更新证书存储

直接将 /usr/local/share/ca-certificates 对应的证书删除, 然后执行 update-ca-certificates

[yaxin@ubox ~]$ sudo rm -f /usr/local/share/ca-certificates/xinmu.crt
[yaxin@ubox ~]$ sudo update-ca-certificates
Updating certificates in /etc/ssl/certs... 0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d....done.

这时候并不会提示 1 removed, 但证书是已经被删除了的

原理

其实 update-ca-certificates 是一个 shell 脚本, 使用 which 找出 update-ca-certificates 的绝对路径, 然后打开就可以查看其源码

[yaxin@ubox ~]$ which update-ca-certificates
/usr/sbin/update-ca-certificates
[yaxin@ubox ~]$ file /usr/sbin/update-ca-certificates
/usr/sbin/update-ca-certificates: POSIX shell script, ASCII text executable

通过阅读源码可以看出, update-ca-certificates 命令的本质其实是将 PEM 格式的根证书内容附加到 /etc/ssl/certs/ca-certificates.crt, 而其中本身就包含了系统自带的各种可信根证书.


原文

Charles - APT repository
初学Ubuntu:Ubuntu16.04系统Charles的配置
Ubuntu添加可信任根证书

最后更新于 2019-07-09
使用 Hugo 构建
主题 StackJimmy 设计