非常教程

Docker 17参考手册

引擎: 安全 | Engine: Security

使用证书进行存储库客户端验证 | Using certificates for repository client verification (Engine)

在用HTTPS运行码头您了解到,默认情况下,Docker通过非联网的Unix套接字运行,为了让Docker客户端和守护进程在HTTPS上安全地通信,必须启用TLS。TLS确保注册表端点的真实性,并加密到/来自注册表的通信量。

本文演示如何确保Docker注册表(即服务器)与Docker守护进程(即客户端)之间的流量已加密,并使用基于证书的客户端 - 服务器身份验证进行了正确的身份验证

我们将向您展示如何为注册表安装证书颁发机构(CA)根证书以及如何设置客户端TLS证书以进行验证。

理解配置

通过/etc/docker/certs.d使用与注册表主机名相同的名称(例如,localhost)创建目录来配置自定义证书。所有*.crt文件都作为CA根添加到此目录。

注意:从Docker 1.13开始,在Linux上,任何根证书颁发机构都将与系统默认值(即主机的根CA集合)合并。在1.13和Windows之前,只有在没有提供自定义根证书时才会使用系统默认证书。

一个或多个的存在<filename>.key/cert对向Docker表示,访问所需的存储库需要自定义证书。

注意:如果有多个证书,将按字母顺序尝试每个证书。如果存在认证错误(例如403,404,5xx等),Docker将继续尝试使用下一个证书。

以下说明了具有自定义证书的配置:

    /etc/docker/certs.d/        <-- Certificate directory
    └── localhost:5000          <-- Hostname:port
       ├── client.cert          <-- Client certificate
       ├── client.key           <-- Client key
       └── ca.crt               <-- Certificate authority that signed
                                    the registry certificate

前面的示例是特定于操作系统的,仅用于说明性目的。在创建操作系统提供的捆绑证书链时,您应该参考操作系统文档。

创建客户端证书

您将使用OpenSSL的genrsareq命令首先生成RSA密钥,然后使用密钥创建证书。

$ openssl genrsa -out client.key 4096
$ openssl req -new -x509 -text -key client.key -out client.cert

这些TLS命令将只在Linux上生成一组有效的证书。MacOS中的OpenSSL版本与Docker要求的证书类型不兼容。

故障排除提示

Docker守护进程解释.crt文件作为CA证书和.cert文件作为客户端证书。如果CA证书意外地被授予扩展名.cert而不是正确的.crt扩展时,Docker守护进程记录以下错误消息:

Missing key KEY_NAME for client certificate CERT_NAME. Note that CA certificates should use the extension .crt.

如果没有端口号访问Docker注册表,请不要将端口添加到目录名。下面显示默认端口443上注册表的配置,docker login my-https.registry.example.com*

    /etc/docker/certs.d/
    └── my-https.registry.example.com          <-- Hostname without port
       ├── client.cert
       ├── client.key
       └── ca.crt

相关信息

  • 使用可信映像
  • 保护Docker守护进程套接字

用法,注册表,存储库,客户端,根,证书,docker,apache,ssl,tls,文档,示例,文章,教程

Docker 17

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

主页 https://docker.com/
源码 https://github.com/docker/docker
版本 17
发布版本 17.06