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

 更新时间:2021年03月29日 10:10:58   作者:sskywatcher  
这篇文章主要介绍了解决docker的tls(ssl)证书过期问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

问题现象:

[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.那么内容如下:

{
 "insecure-registries" : ["10.0.0.0/8"]
}
 

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

{
 "insecure-registries" : ["myregistrydomain.com:5000"]
}

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

重启docker服务.

查看是否生效,注意 Insecure Registries 字段.

[root@localhost ~]# docker info
 
docker info :
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 2
Server Version: 17.05.0-ce
Storage Driver: overlay
 Backing Filesystem: xfs
 Supports d_type: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 9048e5e50717ea4497b757314bad98ea3763c145
runc version: 9c2d8d184e5da67c95d601382adf14862e4f2228
init version: 949e6fa
Security Options:
 seccomp
 Profile: default
Kernel Version: 3.10.0-693.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 24
Total Memory: 62.74GiB
Name: localhost.localdomain
ID: 755F:OEFV:VP3S:BMGQ:VUFW:WGT5:YQHO:EW6T:AAVE:NHS2:TPV3:SBTJ
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
 10.0.0.0/8
 127.0.0.0/8
Live Restore Enabled: false

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

以火狐浏览器为例

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

更换Docker registry证书

拉取镜像时报错如下:

k8s@master:~/shiyu$ docker pull reg.netlab.com/tensorflow-cpu
Using default tag: latest
Error response from daemon: Get https://reg.netlab.com/v2/: x509: certificate has expired or is not yet valid

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

root@master:~# openssl x509 -in /etc/docker/certs.d/reg.netlab.com/reg.netlab.com.crt -noout -dates
notBefore=Apr 1 13:21:22 2019 GMT
notAfter=Mar 31 13:21:22 2020 GMT

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

重新自签新证书

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

mkdir -p ~/certs

生成key

cd ~/certs
openssl genrsa -out reg.netlab.com.key 2048

生密钥文件

openssl req -newkey rsa:4096 -nodes -sha256 -keyout reg.netlab.com.key -x509 -days 365 -out reg.netlab.com.crt

填写相关信息

Country Name (2 letter code) [XX]:CN   # 你的国家名称
State or Province Name (full name) []:guangdong
# 省份
Locality Name (eg, city) [Default City]:guagnzhou  # 所在城市
Organization Name (eg, company) [Default Company Ltd]:sysu
# 组织名称
Organizational Unit Name (eg, section) []:netlab  # 组织单元名称
Common Name (eg, your name or your server's hostname) []:reg.netlab.com # 域名
Email Address []:urmsone@163.com

至此,证书自签完成。

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

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

添加证书到docker根证书中

mkdir -p /etc/docker/certs.d/reg.netlab.com
cp ~/certs/reg.netlab.com.crt /etc/docker/certs.d/reg.netlab.com/

重启Docker

systemctl restart docker

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

查看registry容器ID

k8s@master:~$ docker ps |grep registry
3eb5eda4b75e  registry.docker-cn.com/library/registry:2 "/entrypoint.sh /etc…" 13 months ago  Up 44 minutes  0.0.0.0:443->5000/tcp registry
b84ea71a572f  f32a97de94e1        "/entrypoint.sh /etc…" 13 months ago  Up About an hour 0.0.0.0:5000->5000/tcp registry_mirror

根据ID查看rigstry的挂载路径

k8s@master:~$ docker inspect 3eb5eda4b75e
...
"Binds": [
   "/root/certs:/certs",
   "/home/registry:/var/lib/registry"
  ]
...

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

root@master:~/certs# ll
总用量 16
drwxr-xr-x 2 root root 4096 Apr 1 2019 ./
drwx------ 8 root root 4096 May 2 14:06 ../
-rw-r--r-- 1 root root 2126 Apr 1 2019 reg.netlab.com.crt
-rw------- 1 root root 3272 Apr 1 2019 reg.netlab.com.key

重启registry容器

k8s@master:~$ systemctl restart docker

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

测试

k8s@master:~/shiyu$ docker pull reg.netlab.com/tensorflow-cpu
Using default tag: latest
latest: Pulling from tensorflow-cpu
Digest: sha256:68da50778a5f80e0676c4ca617299444fc71677a2d83cacccaf7a08d08cc1df6
Status: Image is up to date for reg.netlab.com/tensorflow-cpu:latest

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

相关文章

  • Docker 部署 Mysql8.0的方法示例

    Docker 部署 Mysql8.0的方法示例

    这篇文章主要介绍了Docker 部署 Mysql8.0的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • docker容器启动失败如何查看日志

    docker容器启动失败如何查看日志

    这篇文章主要介绍了docker容器启动失败如何查看日志问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • 本地使用docker打包部署镜像的方法

    本地使用docker打包部署镜像的方法

    这篇文章主要介绍了本地使用docker打包部署镜像的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • docker run之后状态总是Exited

    docker run之后状态总是Exited

    这篇文章主要介绍了docker run之后状态总是Exited,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • 使用jib打包docker镜像实战

    使用jib打包docker镜像实战

    这篇文章主要介绍了使用jib打包docker镜像实战,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • docker 如何修改mysql的root密码

    docker 如何修改mysql的root密码

    这篇文章主要介绍了docker 修改mysql的root密码操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Docker安装和简单使用入门教程

    Docker安装和简单使用入门教程

    这篇文章主要介绍了Docker安装和简单使用入门教程,由于小编使用的是linux系统,支持docker的,所以安装相对比较简单,需要的的朋友参考下吧
    2017-01-01
  • Docker swarm 简单使用教程

    Docker swarm 简单使用教程

    Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源,接下来通过本文给大家介绍Docker swarm 简单使用,感兴趣的朋友一起看看吧
    2021-11-11
  • docker centos7 安装ssh具体步骤

    docker centos7 安装ssh具体步骤

    这篇文章主要介绍了 docker centos7 安装ssh相关资料,这里提供了详细的具体安装步骤,需要的朋友可以参考下
    2016-11-11
  • Docker利用DockerFile创建部署NVIDIA+PyTorch容器的详细过程

    Docker利用DockerFile创建部署NVIDIA+PyTorch容器的详细过程

    这篇文章主要介绍了Docker利用DockerFile创建部署NVIDIA+PyTorch容器的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06

最新评论