欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

解决docker的tls(ssl)证书过期问题

程序员文章站 2022-12-06 10:54:53
问题现象:[root@localhost ~]# docker image pull xxx.com.cn/centos7using default tag: latesterror response...

问题现象:

[root@localhost ~]# docker image pull xxx.com.cn/centos7

using default tag: latest

error response from daemon: get https://xxx.com.cn/v1/_ping: x509: certificate has expired or is not yet valid

可能的原因分析:

linux使用查看date查看当前时间,与证书的有效时间作比对,得出具体的原因,可能为以下二种之一:

1.本机的时间不对;

2.registry的证书确实已过期;

解决方法:

1.本机的时间不对;

修改本机时间即可

2.registry的证书确实已过期;

对 registry 创建 ssl 安全例外,放弃对 registry 服务器证书合法性校验,但是具有安全风险.

insecure registries 使能后, docker 将以以下步骤尝试https连接:

首先尝试使用https.

如果 https 连接可达但是证书不可用, 忽略证书错误;

如果 https 连接不可用, 使用 http.

centos 在 /etc/docker/ 目录下创建daemon的配置文件 daemon.json ,将你的目标 registry 所处的 ip 地址段或者具体的服务域名端口号写入 json 文件,

举个例子,笔者的服务器所在网段为10.0.0.0/8.那么内容如下:

也可以使用域名加端口号,示例如下:

windows 则修改文件 c:\programdata\docker\config\daemon.json ,格式与linux操作的一样.

重启docker服务.

查看是否生效,注意 insecure registries 字段.

如何查看服务器证书有效期

以火狐浏览器为例

解决docker的tls(ssl)证书过期问题

补充:docker私有仓库更换过期的自签证书

更换docker registry证书

拉取镜像时报错如下:

查询/etc/docker/certs下的证书是否已过期

显然,该自签证书在2020年3月31号已过期。

重新自签新证书

创建~/certs文件夹存放key和密钥

生成key

生密钥文件

填写相关信息

至此,证书自签完成。

将该证书添加到docker根证书中,重启docker

注:由于是自签名证书,默认是不受docker信任的,故而需要将证书添加到docker的根证书中,docker在centos 7/ubuntu 18中,证书存放路径是/etc/docker/certs.d/域名:

添加证书到docker根证书中

重启docker

替换docker registry容器中的过期证书

查看registry容器id

根据id查看rigstry的挂载路径

将刚刚新生成的证书cp到/root/certs:/certs目录下

重启registry容器

至此,自签证书更新完毕!

测试

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。