特定服务器上的docker容器内的SSL证书验证失败

Den*_*ise 6 ssl docker

我遇到了一个奇怪的证书问题,我无法弄清楚如何调试.当我在一个特定服务器上的docker容器内运行wget时,它无法验证证书.同样的wget在服务器机器本身(在docker之外)上工作正常,并且它在不同服务器上的同一个docker容器内工作.

这是docker容器的设置:

docker run --rm -ti debian:jessie bash
apt-get update
apt-get install wget
wget https://google.com
Run Code Online (Sandbox Code Playgroud)

回应是:

converted 'https://google.com' (ANSI_X3.4-1968) -> 'https://google.com' (UTF-8)
--2016-06-22 14:22:02--  https://google.com/
Resolving google.com (google.com)... 216.58.217.142, 2607:f8b0:4004:807::200e
Connecting to google.com (google.com)|216.58.217.142|:443... connected.
ERROR: The certificate of 'google.com' is not trusted.
ERROR: The certificate of 'google.com' hasn't got a known issuer.
The certificate's owner does not match hostname 'google.com'
Run Code Online (Sandbox Code Playgroud)

由于此相同的过程适用于其他服务器,因此问题似乎只是该服务器本身的某些证书​​问题.但我必须感到困惑:为什么服务器上的证书本身与docker容器内发生的事情有什么关系?

我非常感谢对此的任何见解,特别是我可以采取的任何调试步骤来更好地理解问题.

mic*_*ard 15

似乎证书在jessie图像中已经过时了.

apt-get install ca-certificates在wget之前尝试


DMa*_*art 2

Docker 使用 iptables。

如果您设置了 iptable 规则,则可以将每个 https 请求定向到您自己正在运行的服务器。

例如,如果您在本地运行 jenkins 并使用 iptables 将 443 重定向到默认 8080 端口,则所有到端口 443 的容器流量都将被重定向到本地 jenkins 服务器,该服务器将无法验证您的证书。我们在使用 Jenkins 构建 docker 镜像时遇到了这个问题。我们的詹金斯使用 iptables 来绕过以 root 身份运行詹金斯。