docker pull遇见自签证书的https registry

1 概述:

1.1 tls客户端对服务端进行校验

校验一半至少包含2层,一层是检查服务端证书中的COMMON NAME字段以及SAN字段是否包含了请求中指定的域名或者IP,另外一层是检查服务端证书是不是被客户端信任的CA所签发。一个常见的情景是docker client尝试从镜像服务(暴露https端口)中拉取镜像,会从上述2个层次做检查,如果有一个检查不通过则无法拉取镜像。


2 遇见自签证书的https registry解决方案之一:

将registry的CA证书ca.crt复制到本地。

# 如果客户端是centos系统

# 1)安装工具包
yum install -y ca-certificates

# 2)复制ca.crt
/bin/cp -f ca.crt /etc/pki/ca-trust/source/anchors/

# 3)更新被信任的CA证书
update-ca-trust

# 4)重启本地dockerd(此步骤是必须的,否则依然报错x509: certificate signed by unknown authority)
systemctl daemon-reload
systemctl restart docker

# 如果客户端是ubuntu系统

# 1)安装工具包
apt-get install -y ca-certificates

# 2)复制ca.crt
/bin/cp ca.crt /usr/local/share/ca-certificates/

# 3)更新被信任的CA证书
update-ca-certificates

# 4)重启本地dockerd(此步骤是必须的,否则依然报错x509: certificate signed by unknown authority)
systemctl daemon-reload
systemctl restart docker

3 小结:

期望docker client忽略检查tls握手中的CA校验,可以在操作系统层面解决,例如公司内部的https服务都使用同一个CA证书,将证书分发到每台机器上并执行相关命令,即可实现机器上的所有进程都信任该CA,当然也包括docker client、curl等。

你可能感兴趣的:(docker,docker,https)