一、关于证书

只要客户端信任其内置的证书颁发机构,Mitmproxy即可即时解密加密的流量。通常,这意味着必须在客户端设备上安装mitmproxy CA证书。

二、快速设置

到目前为止,安装mitmproxy证书的最简单方法是使用内置的证书安装应用程序。为此,只需启动mitmproxy并使用正确的代理设置配置目标设备。现在启动设备上的浏览器,并访问 mitm.it。您应该会看到类似以下内容的内容:

mitmproxy证书安装

单击相关图标,按照所用平台的设置说明进行操作,一切顺利。

三、手动安装mitmproxy CA证书

有时无法选择使用快速安装应用程序-想到Java或iOS Simulator-或出于某些其他原因而只需要手动进行操作即可。以下是一些通用平台的手动证书安装文档的指针列表。mitmproxy CA证书位于~/.mitmproxymitmproxy的首次启动后,位于该证书中 。

  • 在命令行上curl:

    curl --proxy 127.0.0.1:8080 --cacert ~/.mitmproxy/mitmproxy-ca-cert.pem https://example.com/
  • 在命令行上的wget:
    wget -e https_proxy=127.0.0.1:8080 --ca-certificate ~/.mitmproxy/mitmproxy-ca-cert.pem https://example.com/
  • 苹果系统
  • Ubuntu/Debian
  • 火狐浏览器
  • Linux上的Chrome
  • iOS

在最新的iOS版本上,您还需要启用对mitmproxy根证书的完全信任:

  • 转到设置>常规>关于>证书信任设置。
  • 在“对根证书启用完全信任”下,打开对mitmproxy证书的信任。
sudo keytool -importcert -alias mitmproxy -storepass changeit -keystore $JAVA_HOME/lib/security/cacerts -trustcacerts -file ~/.mitmproxy/mitmproxy-ca-cert.pem

四、mitmproxy证书颁发机构

首次运行mitmproxymitmdump时,将在配置目录中创建mitmproxy证书颁发机构(CA)(~/.mitmproxy默认)。该CA用于为客户端访问的每个SSL站点动态生成虚拟证书。由于您的浏览器不信任开箱即用的mitmproxy CA,因此,每次通过mitmproxy访问新的SSL域时,您都会看到SSL证书警告。通过浏览器测试单个站点时,仅手动接受伪造的SSL证书并不会带来太多麻烦,但是在许多情况下,您将需要配置测试系统或浏览器以将mitmproxy CA信任为签名根权限。出于安全原因,mitmproxy CA会在首次启动时唯一生成,并且不会在不同设备上的mitmproxy安装之间共享。

五、证书固定

某些应用程序使用证书固定来防止中间人攻击。这意味着如果 不对其进行修改,这些应用程序将不接受mitmproxymitmdump的证书。建议使用直通功能,以防止mitmproxy和mitmdump拦截到这些特定域的通信。如果要拦截固定的连接,则需要手动修补应用程序。对于Android(越狱)iOS设备,存在各种工具可以完成此操作。

六、CA和证书文件

mitmproxy.mi​​tmproxy目录中创建的文件如下:

  • mitmproxy PEM格式的证书和私钥。
  • mitmproxy-ca-cert.pem PEM格式的证书。使用它可以在大多数非Windows平台上分发。
  • mitmproxy-ca-cert.p12 PKCS12格式的证书。用于Windows。
  • mitmproxy-ca-cert.cer 与.pem相同的文件,但某些Android设备需要扩展名。

七、使用自定义服务器证书

您可以通过将--cert [domain=]path_to_certificate选项传递给mitmproxy来使用自己的(叶子)证书。然后,Mitmproxy使用提供的证书来拦截指定的域,而不是生成由其自己的CA签名的证书。

证书文件应采用PEM格式。您可以在叶证书的正下方包括中间证书,以便您的PEM文件大致如下所示:

-----BEGIN PRIVATE KEY-----
<private key>
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
<cert>
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
<intermediary cert (optional)>
-----END CERTIFICATE-----

例如,您可以按照以下说明生成此格式的证书:

openssl genrsa -out cert.key 2048
# (Specify the mitm domain as Common Name, e.g. \*.google.com)
openssl req -new -x509 -key cert.key -out cert.crt
cat cert.key cert.crt > cert.pem

现在,您可以使用生成的证书运行mitmproxy

对于所有域名
mitmproxy --cert *=cert.pem

对于特定域名

mitmproxy --cert *.example.com=cert.pem

注意: *.example.com适用于所有子域。您也可以将其 www.example.com用于特定的子域。

八、使用自定义证书颁发机构

默认情况下,mitmproxy~/.mitmproxy/mitmproxy-ca.pem用作证书颁发机构,以为所有未提供自定义证书的域生成证书(请参见上文)。您可以通过将--set confdir=DIRECTORY选项传递给mitmproxy来使用自己的证书颁发机构。然后,Mitmproxy将mitmproxy-ca.pem在指定目录中查找。如果不存在这样的文件,它将自动生成。

九、使用客户端证书

您可以通过将--set client_certs=DIRECTORY|FILE选项传递给mitmproxy来使用客户端证书。使用目录允许根据主机名选择证书,而使用文件名允许将单个特定证书用于所有SSL连接。证书文件必须为PEM格式,并且应同时包含未加密的私钥和证书。

十、多个客户证书

您可以将目录指定为--set client_certs=DIRECTORY,在这种情况下,将按文件名查找匹配的证书。因此,如果您访问example.org,则mitmproxy会example.org.pem在指定目录中查找名为的文件,并将其用作客户端证书。