在哪里添加 Docker for Mac 的客户端证书?

问题描述 投票:0回答:5

我有一个 docker 注册表,我正在 nginx 代理后面访问该注册表,该代理使用客户端 ssl 证书进行身份验证。

当我尝试推送到此注册表时,我需要 docker 守护进程将客户端证书发送到 nginx。

根据: https://docs.docker.com/engine/security/certificates/

应该有一个名为 /etc/docker 的目录,这些证书可以存放在其中。 Docker for Mac 上不存在此目录。

所以我想我应该尝试将证书放入虚拟机本身:

docker-machine ssh 默认

这导致 docker 抱怨: 来自守护进程的错误响应:crypto/tls:私钥与公钥不匹配

我不认为我的密钥对有任何问题,并且我已经在 Linux 上完成了相同的设置(更容易),没有任何问题。

macos docker ssl tls1.2
5个回答
6
投票

4 年后,Google 仍然把我带到这里。

我在官方文档中找到了答案: (苹果机)https://docs.docker.com/desktop/faqs/macfaqs/#add-client-certificates (Windows)https://docs.docker.com/desktop/faqs/windowsfaqs/#how-do-i-add-client-certificates

引自来源:

您可以将您的客户端证书放入

~/.docker/certs.d/<MyRegistry>:<Port>/client.cert
~/.docker/certs.d/<MyRegistry>:<Port>/client.key

当 Docker for Mac 应用程序启动时,它会复制 将 Mac 上的

~/.docker/certs.d
文件夹复制到
/etc/docker/certs.d
Moby(Mac
xhyve
虚拟机的 Docker)上的目录。

  • 对钥匙串或
    ~/.docker/certs.d
    目录进行任何更改后,您需要重新启动 Docker for Mac,以便
    更改生效。
  • 注册表不能被列为不安全注册表(请参阅Docker Engine)。 Docker for Mac 将忽略下面列出的证书
    不安全的注册表,并且不会发送客户端证书。命令
    就像 docker run 一样,尝试从注册表中拉取会产生
    命令行以及注册表上的错误消息。

1
投票

自签名 TLS CA 可以这样安装,您的证书可能位于同一目录中。

sudo mkdir -p /Applications/Docker.app/Contents/Resources/etc/ssl/certs
sudo cp my_ca.pem /Applications/Docker.app/Contents/Resources/etc/ssl/certs/ca-certificates.crt

0
投票

https://docs.docker.com/desktop/mac/#add-tls-certificates对我有用,这里是关于如何使用的用户的简短描述

  • Docker 桌面
  • Mac os 系统
  1. 将证书添加到 mac os 链中
# Add the cert for all users
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ca.crt

# Add the cert for yourself
security add-trusted-cert -d -r trustRoot -k ~/Library/Keychains/login.keychain ca.crt

  1. 重新启动 Docker 桌面

0
投票

这是 Docker for Mac 中最新的“2022 年 10 月”文档。 (我明确表示要查看完整网址!)

应该有一个名为 /etc/docker 的目录,这些证书可以存放在其中。 Docker for Mac 上不存在此目录。

就我而言,默认情况下我也没有

/etc/docker
。如果您使用
~/.docker
,docker 桌面会将别名传递到
/etc/docker

我不认为我的密钥对有任何问题,并且我已经在 Linux 上完成了相同的设置(更容易),没有任何问题。

您可以尝试将密钥对放在

~/.docker/certs.d/Hostname:port
下,然后重新启动 Docker Desktop for Mac。结果,我想你可以实现你想要的。


0
投票

在 MacOS 上,为了在 Docker 容器内获取主机 TLS 证书,我会执行以下操作:

  1. 将根 TLS 证书从 MacOS 钥匙串导出到主机上的本地文件夹:
    security find-certificate -a -p /System/Library/Keychains/SystemRootCertificates.keychain > ~/.local_certs_for_docker/system_roots_certs.pem
  2. 将 Docker 卷中的主机证书挂载到
    /etc/ssl/certs/
    。例如,使用
    docker run
    ,您可以执行以下操作:
    -p ~/.local_certs_for_docker/certs.pem:/etc/ssl/certs/ca-certificates.crt

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.