【问题标题】:Can't configure Docker to use Burp Suite proxy on Catalina无法将 Docker 配置为在 Catalina 上使用 Burp Suite 代理
【发布时间】:2020-11-09 23:00:54
【问题描述】:

我正在尝试将 Docker 与拥有自己的 CA 证书的代理服务器一起使用。如果不在每个容器上安装证书,我无法弄清楚如何为在我的用户下运行的所有容器配置代理。对此的任何帮助将不胜感激!

我在 OS X Catalina 10.15.4 上使用 Docker Desktop Docker 版本 19.03.13,构建 4484c46d9d。 Burp Suite 代理我计算机上的所有 HTTP 请求。我的 OS X 登录和系统钥匙串中安装了 Burp Suite CA 证书。当我在 ~/.docker/config.json 文件中配置代理时,它指向正确的代理,但出现错误:

Errno::ECONNREFUSED: Failed to open TCP connection to 127.0.0.1:8080

当我直接在 Docker 容器中安装 Burp Suite 证书时,我能够代理请求而无需额外的配置(包括环境变量或 config.json 更改)。但是,我运行了很多 Docker 容器,其中大多数都针对多个开发环境进行了标准化,并且不想在只有我的机器需要的时候修改每个 Dockerfile。

这是我的~/.docker/config.json 文件的相关部分:

{
  "proxies": {
    "default": {
      "httpProxy": "http://127.0.0.1:8080",
      "httpsProxy": "https://127.0.0.1:8080"
    }
  }
}

这是我的 Dockerfile:

FROM ruby:2
RUN gem install ronin-support
COPY rails_rce.rb .

最后,这是我运行docker build .时的总输出:

Sending build context to Docker daemon  11.26kB
Step 1/3 : FROM ruby:2
 ---> 343d2dc24f38
Step 2/3 : RUN gem install ronin-support
 ---> Running in 150bf40c6ad8
ERROR:  Could not find a valid gem 'ronin-support' (>= 0), here is why:
          Unable to download data from https://rubygems.org/ - Errno::ECONNREFUSED: Failed to open TCP connection to 127.0.0.1:8080 (Connection refused - connect(2) for "127.0.0.1" port 8080) (https://rubygems.org/specs.4.8.gz)
The command '/bin/sh -c gem install ronin-support' returned a non-zero code: 2

我是创建自己的 Dockerfile 和配置的新手,所以如果这是非常基本的,我很抱歉 - 我已经用谷歌搜索了几个小时,但没有任何帮助。

【问题讨论】:

    标签: macos docker burp proxies


    【解决方案1】:

    need to connect from the container to the host on Mac 也是一样。

    您应该使用host.docker.internal 而不是localhost

    所以配置将是

    {
      "proxies": {
        "default": {
          "httpProxy": "http://host.docker.internal:8080",
          "httpsProxy": "http://host.docker.internal:8080"
        }
      }
    }
    

    此外,您需要将 BurpSuite CA 添加到您的容器中。

    首先,将其转换为 PEM。

    openssl x509 -inform der -in cacert.der  -out burp_cert.crt
    
    

    然后用 Dockerfile 向容器中的可信 CA 添加一个

    FROM ruby:2
    COPY burp_cert.crt /usr/local/share/ca-certificates/burp.crt 
    RUN update-ca-certificates
    RUN gem install ronin-support
    COPY rails_rce.rb 
    

    【讨论】:

    • 谢谢,这有帮助,但现在如果我不在 Docker 容器中安装证书,我会再次收到此错误:错误:深度 1 的 SSL 验证错误:证书链中的自签名证书(19) 错误:根证书不受信任(/C=PortSwigger/ST=PortSwigger/L=PortSwigger/O=PortSwigger/OU=PortSwigger CA/CN=PortSwigger CA)
    • @Dana Scheider 发生这种情况是因为您的容器对您的“受信任”CA 一无所知。您还应该将 CA 证书安装到容器中。
    • 是的,问题是我在我的机器上运行的每个容器都需要这个,其中包括设置了需要在开发环境之间共享的配置的容器。除了将其添加到每个 Dockerfile 中,然后在提交之前检查之外,还必须有其他方法,对吧?
    • @Dana Scheider 无论哪种方式,您都必须将证书添加到容器的受信任存储中。你只能简化这个过程。例如,您可以创建一个带有可配置参数的父镜像(在容器启动时添加或不添加证书到 CA)并从该镜像继承您的所有镜像。
    • 哦,真烦人!非常感谢您抽出宝贵时间回答我的问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多