为什么在 Docker(在 Mac 上)上安装软件包时出现 SSL 错误?

Raf*_*sta 5 macos ssl docker alpine-linux docker-desktop

我在 MacOS 上通过 Docker Desktop 运行 Docker,在容器中安装软件包时遇到很多麻烦,因为它无法验证任何 ssl 证书。

\n

apk update例如,当我运行时,我收到此错误:

\n
fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/main/x86_64/APKINDEX.tar.gz\n139797308250952:error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed:ssl/statem/statem_clnt.c:1914:\nERROR: https://dl-cdn.alpinelinux.org/alpine/v3.14/main: Permission denied\n
Run Code Online (Sandbox Code Playgroud)\n

当我尝试bundle install

\n
Could not verify the SSL certificate for https://rubygems.org/.\nThere is a chance you are experiencing a man-in-the-middle attack, but most likely your system doesn\'t have the CA certificates needed for verification.\n
Run Code Online (Sandbox Code Playgroud)\n

甚至是一个简单的卷曲curl https://google.com.br

\n
curl: (60) SSL certificate problem: unable to get local issuer certificate\nMore details here: https://curl.se/docs/sslcerts.html\n\ncurl failed to verify the legitimacy of the server and therefore could not\nestablish a secure connection to it. To learn more about this situation and\nhow to fix it, please visit the web page mentioned above.\n
Run Code Online (Sandbox Code Playgroud)\n
\n

更新

\n

即使我在容器内安装了 ca 证书(如 @\xce\xb2.\xce\xb5\xce\xb7\xce\xbf\xce\xb9\xcf\x84.\xce\xb2\xce\xb5 所说),我仍然得到同样的错误SSL certificate problem: unable to get local issuer certificate

\n

添加到 Dockerfile 中的这一行,如 @\xce\xb2.\xce\xb5\xce\xb7\xce\xbf\xce\xb9\xcf\x84.\xce\xb2\xce\xb5 提到的:

\n
RUN apk add --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/v3.15/main ca-certificates curl\n
Run Code Online (Sandbox Code Playgroud)\n

Raf*_*sta 9

事实证明 \xce\xb2.\xce\xb5\xce\xb7\xce\xbf\xce\xb9\xcf\x84.\xce\xb2\xce\xb5 答案很好,但我并没有真正掌握我的所有信息毕竟需要解决我的问题..

\n

我必须使用 openssl 调用来跟踪 ca 证书链,使用以下命令:

\n
openssl s_client -connect google.com:443\n
Run Code Online (Sandbox Code Playgroud)\n

这给我返回了这个:

\n
openssl s_client -connect google.com:443\n
Run Code Online (Sandbox Code Playgroud)\n

由此可以看出它正在尝试查找此 Zscaler 证书而不是 google 证书。我发现这是我们公司用来监视流量的拦截器。\n通过这个,我找到了这篇文章,它导致了这个文档,其中解释了如何在 mac 环境中将证书添加到 docker。

\n

所以解决方案是将证书添加到系统中:

\n
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain <CERTIFICATE>\n
Run Code Online (Sandbox Code Playgroud)\n

并将证书添加到 docker 并安装 ca-certificate,如 \xce\xb2.\xce\xb5\xce\xb7\xce\xbf\xce\xb9\xcf\x84.\xce\xb2\xce\xb5 所示:

\n
ADD ./ZscalerRootCertificate.crt /usr/local/share/ca-certificates/\nRUN apk add --no-cache \\\n    --repository http://dl-cdn.alpinelinux.org/alpine/v3.15/main \\\n    ca-certificates\nRUN update-ca-certificates\n
Run Code Online (Sandbox Code Playgroud)\n


β.ε*_*.βε 6

这不是与 Mac 相关的问题,您只是缺少容器中的根证书。

为了安装它们,您需要访问 Alpine 软件包存储库的 http 版本,否则您还会在获取此软件包时遇到 SSL 问题:

RUN apk add \
      --no-cache \
      --repository http://dl-cdn.alpinelinux.org/alpine/v3.14/main \
      ca-certificates
Run Code Online (Sandbox Code Playgroud)

从那时起,您应该能够再次正常安装软件包。