Docker TLS - 如何在本地机器上创建密钥

Posted

技术标签:

【中文标题】Docker TLS - 如何在本地机器上创建密钥【英文标题】:Docker TLS - How to create key on local machine 【发布时间】:2020-02-12 14:10:28 【问题描述】:

前置知识:

所以我自己开始使用 docker 并将其安装在我的服务器上并启用了 TLS。我遵循了这个教程:https://docs.docker.com/engine/security/https/

本教程最终会给你 6 个文件:

    -r-------- ca-key.pem -r--r--r-- ca.pem -r--r--r-- cert.pem -r-------- key.pem -r--r--r-- server-cert.pem -r-------- server-key.pem

这些文件的所有者是 root。我复制了 ca.pemcert.pemkey.pem,并使用它们从我的本地 portainer 实例进行连接。 (实际上我只使用了 cert.pemkey.pem 因为我只开启了客户端验证)

DOCKER 主机:


  "hosts": [
    "unix:///var/run/docker.sock",
    "tcp://0.0.0.0:2376"
  ],
  "storage-driver": "overlay2",
  "tls": true,
  "tlscacert": "/etc/docker/certs/ca.pem",
  "tlscert": "/etc/docker/certs/server-cert.pem",
  "tlskey": "/etc/docker/certs/server-key.pem",
  "tlsverify": true


我的问题:

我工作的公司为我安装了 docker 并启用了 TLS,将所有 pem 文件放在我可以访问的目录中...问题是,我无法下载 密钥。 pem 因为所有者是 root,我无法访问它。

我可以下载下一个文件:

    ca.pem cert.pem server-cert.pem

对我来说是可能的; ONLY 可以访问这些文件,而不更改服务器上的任何内容,以通过 TLS 访问 docker?如何创建自己的 key.pem,或者有其他方法吗?


对不起,如果这是常识,我只是无法在任何地方找到我的答案,或者我不知道我到底在寻找什么......

【问题讨论】:

【参考方案1】:

是的,您可以使用该服务器上的 docker-daemon,而无需为该服务器创建另一个密钥和证书。

下载server-cert.pem 并在本地会话中导出以下环境变量:

DOCKER_TLS_VERIFY="1"
DOCKER_CERT_PATH="server-cert.pem"
DOCKER_HOST= "tcp://HOST:2376"

现在您可以使用本地 docker-client 并使用服务器上的 docker-daemon。例如docker ps 应该显示在远程 docker 上运行的容器。

【讨论】:

这是一种 2 路身份验证,所以这不起作用,服务器不会接受。答案如下:“做不到”。服务器管理员创建了一个临时文件夹,我可以在其中下载私钥并在之后将其删除。【参考方案2】:

私钥创建证书,您不能从证书创建密钥。如果您的 docker 想要 2 路身份验证,您将需要访问私钥。没有就做不到。

您需要以下文件(用于客户端-服务器身份验证):

    ca.pem cert.pem key.pem

【讨论】:

以上是关于Docker TLS - 如何在本地机器上创建密钥的主要内容,如果未能解决你的问题,请参考以下文章

如何在 localhost 上运行 nats ws 服务器

如何连接本地机器和 Docker 容器?

如何在IIS上创建机器密钥?

如何将本地 Docker 映像部署到 Azure 应用服务?

如何从本地机器\软件中删除密钥?

开源反向代理 Traefik 暴露用户的 TLS 证书密钥