解决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

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

(0)

相关推荐

  • 使用TLS加密通讯远程连接Docker的示例详解

    默认情况下,Docker 通过非联网 UNIX 套接字运行.它还可以使用 HTTP 套接字进行可选通信. 如果需要以安全的方式通过网络访问 Docker,可以通过指定标志将 Docker 标志指向受信任的 CA 证书来启用 TLS. 在守护程序模式下,它只允许来自由该 CA 签名的证书验证的客户端的连接.在客户端模式下,它仅连接到具有该 CA 签名的证书的服务器. # 创建CA证书目录 [root@localhost ~]# mkdir tls [root@localhost ~]# cd tl

  • docker 如何添加证书

    1.升级处理:sudo apt-get update 缺包,包的版本旧等问题可以由此解决,如果不是的话那就是缺失认证,需要生成自己的认证证书. 2.生成自己的认证证书 先建一个文件夹 mkdir -p certs 之后创建证书,证书生成在刚才创建的文件夹中 openssl req -newkey rsa:4096 -nodes -sha256 -keyout /root/certs/domain.key -x509 -days 365 -out /root/certs/domain.crt 之后

  • Docker启用TLS实现安全配置的步骤

    前言 之前开启了docker的2375 Remote API,接到公司安全部门的要求,需要启用授权,翻了下官方文档 Protect the Docker daemon socket 启用TLS 在docker服务器,生成CA私有和公共密钥 $ openssl genrsa -aes256 -out ca-key.pem 4096 Generating RSA private key, 4096 bit long modulus ..................................

  • docker获取Let's Encrypt永久免费SSL证书的方法

    一.起因 官方的cerbot太烦了,不建议使用还不如野蛮生长的acme.sh,而这里介绍docker运行cerbot获取Let's Encrypt永久免费SSL证书 二.选型 cerbot的证书不会自动刷新日期,但是acme.sh自带这功能,每天凌晨0:00自动检测过期域名并且自动续期 选择docker运行cerbot,是为了让服务器里尽量少配置和无意义的程序,方便管理.例如Let's Encrypt需要的Python2.7,git,pip我们都不需要装在宿主机内,容器就自己配置好了 原文 ht

  • 关于docker安全之Docker-TLS加密通讯问题

    一.docker存在的安全问题 docker自身漏洞 作为一款应用 Docker 本身实现上会有代码缺陷.CVE官方记录Docker历史版本共有超过20项漏洞.黑客常用的攻击手段主要有代码执行.权限提升. 信息泄露.权限绕过等.目前 Docker 版本更迭非常快,Docker 用户最好将 Docker 升级为 最新版本. docker源码问题 Docker 提供了 Docker hub,可以让用户上传创建的镜像,以便其他用户下载,快速搭 建环境.但同时也带来了一些安全问题. 例如下面三种方式:

  • 解决Mac Docker x509证书的问题

    问题 最近需要登录私有镜像中心,登录时出现错误提示: Error response from daemon: Get https://***: x509: certificate signed by unknown authority 原因 私有镜像中心的证书不可信,需要添加私有镜像中心的认证证书. 解决方法 比如私有镜像中心的认证证书为ca.crt, 那么执行如下命令: sudo security add-trusted-cert -d -r trustRoot -k /Library/Key

  • 解决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查看当前时间,与证书的有效时间作比对,得出具体的原因,可

  • Java 自动安装校验TLS/SSL证书

    前言 最近实现Socks5 proxy与HTTP proxy中遇到了SSLSocket隧道的问题,当然,最终问题经过自动证书校验安装管理器实现了证书的管理,也解决了SSLSocket,但是目前的问题是浏览器对Socks5和HTTP proxy还有很多不足,目前实现的两个代理工具只能在程序中使用.当然,我们今天的主要话题如下: Java 实现TLS/SSL证书的自动安装校验,主要经过ssl/tls握手,密钥交换,证书校验机制实现.我们这里模拟浏览器,实现自动校验和证书的检测. 主要实现如下功能:

  • 开启OCSP提升https证书验证效率解决Let’s Encrypt SSL证书访问慢的问题

    这几天网站访问出现第一次打开网站特别慢,打开以后页面打开速度正常的问题,经过研究发现是HTTPS证书验证超时的问题,证书商的验证URL无法访问不知道是线路问题还是被墙了. 请教了几位大神如何解决HTTPS证书验证超时的问题.给出的解决方案是要么换证书商,要么开启OCSP. 我这种穷人哪用得起大厂的HTTPS证书呀,只能采用第二种方案,开始OCSP. 如果网站部署了免费的Let's Encrypt证书时,第一次https打开此网站时会显得很慢,往往需要等待四五秒才能正常打开,这是由于特殊原因,oc

  • 微信小程序 免费SSL证书https、TLS版本问题的解决办法

    微信小程序 免费SSL证书https.TLS版本问题的解决办法 微信小程序与第三方服务器通讯的域名5个必要条件 1.一个已备案的域名,不是localhost.也不是127.0.0.1,域名不能加端口 2.加ssl证书,也就是https://~~~ 4.HTTPS 服务器的 TLS 版本支持1.2及以下版本,一般就是1.0.1.1.1.2要同时支持这三个版本,一个也不能少,要不然就会出现下面这种情况 5.微信小程序后台加上合法域名设置(一个月内改的次数是有限的,且行且珍惜)如下图 以上5个条件,必

  • 使用acme.sh注册免费的ssl证书

    先决条件:首先我们需要有一个域名和一台有公网IP的服务器 安装acme.sh curl  https://get.acme.sh | sh 启用别名 source ~/.bashrc 说明: acme.sh 会安装到 ~/.acme.sh 目录下.安装成功后执行 source ~/.bashrc 以确保脚本所设置的命令别名生效. 说明:普通用户和 root 用户都可以安装使用. 安装过程进行了以下几步: 1.把 acme.sh 安装到你的 home 目录下: ~/.acme.sh/ ,并创建 一

  • Java如何跳过https的ssl证书验证详解

    打开我们首页,明显看到链接是https打头,https和http的通信协议差别,在于https安全性更高: http和https的差别 很明显,二者最大的区别在于https多了一个ssl证书验证,可以说https是身披SSL外壳的http.因为http存在如下缺陷: 1)通信使用明文,内容可能被窃听(重要密码泄露) 2)不验证通信方身份,有可能遭遇伪装(跨站点请求伪造) 3)无法证明报文的完整性,有可能已遭篡改(运营商劫持) 而https是利用SSL/TLS建立全信道,加密数据包.HTTPS使用

  • windows下部署免费ssl证书(letsencrypt)的方法

    随着网络的发展,网络安全也越来越重要,对于网站来说,从Http升级到https也是我们要做的首要事情.要实现https,首先我们需要申请一张SSL证书,这篇文章我主要介绍下边这几个方面: 1. SSL简单介绍 2. 免费Letencrypt证书部署 3. 安装注意事项 一.SSL简单介绍 ssl作为一个网络加密协议,主要是存在于系统中应用层和传输层之间的一个安全套接字层(Secure Socket Layer),也就是位于TCP/IP协议和各个应用层协议之间,为应用数据传输提供加密的协议.当然它

  • 在Serv-U中使用SSL证书增强FTP服务器安全性图文设置方法

    为了保证特殊环境下的数据安全,有时是有必要启用SSL功能的.下面笔者以Serv-U服务器为例,介绍如何启用SSL加密功能. 创建SSL证书 要想使用Serv-U的SSL功能,当然需要SSL证书的支持才行.虽然Serv-U 在安装之时就已经自动生成了一个SSL证书,但这个默认生成的SSL证书在所有的Serv-U服务器中都是一样的,非常不安全,所以我们需要手工创建一个新的SSL证书. 以Serv-U6.0汉化版为例,在"Serv-U管理员"窗口中,展开"本地服务器→设置"

  • Nginx服务器的SSL证书配置以及对SSL的反向代理配置

    Nginx的SSL证书配置 1.使用openssl实现证书中心 由于是使用openssl架设私有证书中心,因此要保证以下字段在证书中心的证书.服务端证书.客户端证书中都相同 Country Name State or Province Name Locality Name Organization Name Organizational Unit Name Country Name State or Province Name Locality Name Organization Name Or

随机推荐