我也想知道这个。 我已经按照程序 (https://docs.docker.com/articles/https/) 创建了一个新的 CA 和证书。 我试过将文件 /var/lib/boot2docker 和 /var/lib/boot2docker/tls 放在 /etc/init.d/docker start 脚本覆盖我生成的证书的问题上。
我对此进行了更多研究,看起来 docker-machine 将使用它生成的证书覆盖主机 .docker/machines/machine/default 中的任何内容。 它还替换 /var/lib/boot2docker 中 boot2docker vm 中的文件。 可以登录和替换 vm 中的文件并更新 /var/lib/boot2docker/profile 但这也在启动时被替换(不确定是什么,但可能是'docker-machine env default')。
@oobles您应该能够使用--tls-ca-cert
、 --tls-cert
和--tls-key
选项来指定现有证书。
使用docker-machine --tls-ca-cert=my_company_ca.pem create --driver virtualbox vm
,命令失败:
Error creating machine: error generating server cert: crypto/tls: private key does not match public key
这里的要点(我猜在大多数公司中)是我不能提供--tls-ca-key
选项,因为我不管理公司 CA,所以我不知道私钥。
我在这里错过了什么? 这些选项仅对管理自己的 CA、签署自己的证书的人有用吗?
我只希望我的 docker 客户端(在我的 VM 上)将docker login
放到我们的公司注册表中,该注册表显示了由公司 CA 签署的证书。
有什么帮助吗?
同样的问题这里有什么改进吗?
+1。 在我们的组织中也有同样的问题。
我解决这种情况的方式是:
在注册服务器上:
在 Docker 机器上:
从 https 连接下载时,我的容器构建达到unable to find valid certification
。 我的公司使用中间 ZScaler CA 根证书 & 还使用 PAC 文件来自动配置代理。
+1 对此。 如果可以重用现有的 CA(证书和密钥)和客户端证书(证书和密钥),那么在使用 docker-machine 将证书部署到 docker 引擎时,真的应该可以重用现有的 TLS 基础设施,例如
docker-machine create -d ... \
--tls-ca-cert cacert.pem \
--tls-ca-key cacert.key \
--tls-client-cert local_user.pem \
--tls-client-key local_user.key \
--tls-server-cert server.pem \
--tls-server-key server.key
Error creating machine: Error running provisioning: error generating server cert: crypto/tls: failed to parse private key
对我有用,因为cacert.key
受密码保护。
+1
👍 ,因为这对我们来说是一个主要的障碍。 我们的企业 IT 组织将自定义 HTTPS 证书放在从我们公司防火墙内部到公共 Internet 的所有请求上,因此我们甚至无法在无法正确配置这些证书的情况下联系 docker hub 获取容器。
有没有人找到解决这个问题的方法? 我们的企业 IT 执行中间人以替换所有 HTTPS 证书。
当我尝试...
docker-machine --tls-ca-cert root.cer create --driver virtualbox default
它抛出以下错误
Error creating machine: Error running provisioning: error generating server cert: crypto/tls: private key does not match public key
我最终在机器创建时跳过了 tls 证书。 一旦创建
机器:
docker-machine scp certfile默认:ca.crt
docker-machine ssh 默认
须藤 mv ~/ca.crt /etc/docker/certs.d/docker.io/ca.crt
那么它应该工作。 您可能必须在 mv 之前 mkdir 子目录
命令。 如有必要,将 docker.io 替换为内部注册主机。
上周四,2016年8月11日,安迪Ruestow [email protected]写道:
有没有人找到解决这个问题的方法? 我们的企业 IT 执行中间人
替换所有 HTTPS 证书。当我尝试...
docker-machine --tls-ca-cert root.cer create --driver virtualbox 默认
它引发以下错误创建机器时出错:运行配置时出错:生成错误
服务器证书:crypto/tls:私钥与公钥不匹配—
您收到此消息是因为您发表了评论。
直接回复本邮件,在GitHub上查看
https://github.com/docker/machine/issues/1799#issuecomment -239175647,
或静音线程
https://github.com/notifications/unsubscribe-auth/AAJD9p1tfX97V_OW4DgJkzxP86URi-C5ks5qezAsgaJpZM4F3GTM
.
+ 1 GE 正在使用 Zscaler 并进行 MitM cert mangling 并且 docker 现在无法从我们所有的开发人员机器上使用。
+1,现在也试图解决这个问题。
+1,也试图在企业环境中解决这个问题
+1 也是企业环境,代理进行 MitM 证书处理。 需要一种安装证书的方法。
这需要大量挖掘,解决方案非常简单(但并不明显)。 有几件事需要注意。 答案就在这里- 但是您必须阅读代码部分才能找到替代方法。
基本上,将 CA 信任链的 pem(Base64 编码)版本复制到/var/lib/boot2docker/certs/
。 您不能使用 ca 捆绑包。 boot2docker 启动脚本将自动在那里获取 pem 文件并将它们添加到 ssl 配置中。 此外,这是一个特殊目录,将在重新启动时保留。
$ docker-machine ssh default 'sudo mkdir /var/lib/boot2docker/certs'
$ docker-machine scp corp-ca.pem default:
$ docker-machine ssh default 'sudo mv corp-ca.pem /var/lib/boot2docker/certs/'
$ docker-machine restart default
这应该更简单,所以我支持 (#1799)。 此外,我们应该能够指定一个充满 pem 文件的目录,这样添加多个证书(就像在整个信任链中一样)很容易。
@rpomeroy非常感谢,我一直在做同样的事情,但不知道需要重新启动 VM,因此正在到处复制证书以使其工作
Docker for Windows 的任何修复
@romeroy谢谢,在我们的 docker 机器中导入公司 root ca 是否足以使我们的注册表可访问? 还是我们还需要把东西放在/etc/docker/certs.d/hostname/
正如该线程前面提到的,boot2docker 下的 Linux 发行版基本上是不可变的,因此将内容放入 /etc/docker/certs 将无法生存。 只有 var/lib/boot2docker/certs 是可变和持久的。 请注意,可能需要使用较新版本的 boot2docker 重新验证所有这些信息。
我正在运行 Windows 7 + VirtualBox (v5.2.6) +Docker Toolbox(Boot2Docker 版本 18.02.-ce)并且遇到了同样的问题。
例如,在尝试运行容器时,我收到以下错误:
码头工人运行 ubuntu /bin/echo 'Hello world'
无法在本地找到图像“ ubuntu:latest ”
C:\Program Files\Docker Toolboxdocker.exe:来自守护进程的错误响应:获取https://registry-1.docker.io/v2/:x509 :由未知机构签署的证书。
请参阅“C:\Program Files\Docker Toolboxdocker.exe run --help”。
以下解决方案对我有用:
@kvvoronina我和你面临同样的问题。 相反,我在 win 8.1 上运行 docker 工具箱
我正在尝试使用您的步骤。 但我使用直接连接(意味着我无法在第 2 步和第 4 步中提供任何公司根证书)。 如何解决这个问题? 谢谢
你好,
谢谢鬼它的工作,我现在可以拉我的形象。
但我无法构建此示例的图像: https :
我得到这个错误:
Step 4/7 : RUN pip install --trusted-host pypi.python.org -r requirements.txt
---> Running in b700eb53b7b2
Collecting Flask (from -r requirements.txt (line 1))
Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None))
after connection broken by 'SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAI
LED] certificate verify failed (_ssl.c:726)'),)': /simple/flask/
你有什么问题吗?
Ubel,我遇到了同样的问题,我要拉取图像,但是我无法使用 docker 开始演练来构建图像。 你能克服这个问题吗?
@cmenjivar :不,我仍然有同样的问题......
@Ubel :我找到了一个解决方案,在您的 Dockerfile 中,只需添加所有 3 个托管的 python 主机,而不是一个...
RUN pip install --trusted-host pypi.python.org --trusted-host files.pythonhosted.org --trusted-host pypi.org -r requirements.txt
@cmenjivar :感谢您的帮助。 它也对我有用。
现在我需要用 nuget 包 url 尝试同样的事情
有人可以为 Windows 主机和 Windows 容器更新这个吗?
对于它的价值, @romeroy有正确的答案......
如果您使用的是 Windows,请在“Docker 快速入门终端”中发出以下命令,以确保您拥有合适的环境。 “$”是提示,不要粘贴那部分。 在运行以下命令之前,您可能需要发出cd ~/Downloads
以访问您的下载文件夹。 您可以为需要添加的每个证书颁发机构(中间或其他)重复两个中间步骤 (corp-ca.pem),只需给它们一个不同的名称。 您也可以使用通配符,例如: corp-*.pem
如果您有 corp-ca-root.pem、corp-ca-intermediate.pem 和 corp-issuing-ca.pem。
从上面的@romeroy复制:
$ docker-machine ssh default 'sudo mkdir /var/lib/boot2docker/certs'
$ docker-machine scp corp-ca.pem default:
$ docker-machine ssh default 'sudo mv corp-ca.pem /var/lib/boot2docker/certs/'
$ docker-machine restart default
尝试使用 --tls-cert、--tls-key 和 --tls-ca-cert 的人使用了不正确的选项。 这些用于 docker 客户端和服务器之间的身份验证。
我想说的唯一一点是 /etc 中的文件系统实际上并不是“不可变的”,它们实际上是“短暂的”(tmpfs),这意味着它们会在每次重新启动时消失。 /var/lib/boot2docker/certs 中的信息将重新填充到 /etc/docker/certs 中的正确位置...
无论如何,如果 docker-machine 能够自动信任主机系统信任的任何证书,那就太好了。
对于那些可能认为它只适用于 boot2docker 设置而不适用于 Windows (Hyper-V) 设置的 Docker 的解决方案的人来说,这个( @rpomeroy的解决方案)似乎也很完美。 我一定已经阅读了这个线程六次并拒绝了它,因为它不是特定于 Docker for Windows 环境的。
@rpomeroy的解决方案适用于 boot2docker 和 Docker for Windows。
我将我的公司 .cer 证书上传到我的 docker 容器的 /etc/pki/ca-trust/source/anchors 目录中,并输入以下命令。
更新-ca-信任启用
更新-ca-信任
完成上述步骤后,我可以从 curl 获得所需的输出
只是插话..
看起来在您的容器上添加这两个安装似乎适用于大多数配置:
volumes:
- /etc/ssl/certs:/etc/ssl/certs
- /usr/share/ca-certificates:/usr/share/ca-certificates
Windows 是另一回事。如果可能,我会避免使用 Windows Docker 主机。
最有用的评论
这需要大量挖掘,解决方案非常简单(但并不明显)。 有几件事需要注意。 答案就在这里- 但是您必须阅读代码部分才能找到替代方法。
基本上,将 CA 信任链的 pem(Base64 编码)版本复制到
/var/lib/boot2docker/certs/
。 您不能使用 ca 捆绑包。 boot2docker 启动脚本将自动在那里获取 pem 文件并将它们添加到 ssl 配置中。 此外,这是一个特殊目录,将在重新启动时保留。这应该更简单,所以我支持 (#1799)。 此外,我们应该能够指定一个充满 pem 文件的目录,这样添加多个证书(就像在整个信任链中一样)很容易。