日常在周末更新相关容器,更新 potainer 2.6.3 后发现所有远程 docker 节点都无法连接了,看了下日志报错是这样的:

background schedule error (endpoint snapshot). Unable to create snapshot (endpoint=TOS, URL=tcp://host:port) (err=error during connect: Get "https://host:port/_ping": x509: certificate relies on legacy Common Name field, use SANs or temporarily enable Common Name matching with GODEBUG=x509ignoreCN=0)

从网上检索的信息大概是这个意思:Go 1.15 版本开始废弃 CommonName,因此推荐使用 SAN 证书。

想必就是potainer 更新了 Go 版本吧。虽然也有说可以暂时忽略,但既然更新就有其更新的原因,经过一上午的研究,发现真香。在我之前的文章 Portainer 使用 TLS 加密连接远端节点上的 Docker 中写得是又臭又长,我自己都看不下去了,仔细看了下,决定取其精华去其糟粕,重新生成一套证书,走你。

根证书以及私钥创建

openssl genrsa -aes256 -out ca-key.pem 4096
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -subj "/CN=$HOST" -out ca.pem
openssl genrsa -out server-key.pem 4096

自行更改根证书$HOST,同时在生成 ca-key.pem 时会要求输入密码,后面的密码确认都需要。

服务器证书签发

openssl req -new -sha256 \
  -key server-key.pem \
  -subj "/C=CN/OU=$ORG/O=$COMP/CN=$NAME" \
  -reqexts SAN \
  -config <(cat /etc/ssl/openssl.cnf \
      <(printf "\n[SAN]\nsubjectAltName=DNS:$HOST1,DNS:$HOST2")) \
  -out server.csr
openssl x509 -req -days 365 \
  -in server.csr -out server-cert.pem \
  -CA ca.pem -CAkey ca-key.pem -CAcreateserial \
  -extensions SAN \
  -extfile <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:$HOST1,DNS:$HOST2"))

需要自行修改$ORG $COMP $NAME ,CN 也可改,没记错的话分别对应组织,机构,机构名(哎呀,自己签发的随便写)

接着就是DNS:$HOST1,DNS:$HOST2 这就是 SAN 证书的好处,网上都会拿 google 的 tls 证书举例,其实就是支持通配符,比如我有子域名 server1.lckiss.com,server2.lckiss.com,那么我统一授权为 *.lckiss.com 即可,后面还可以继续加域名。

PS:上述命令中的 /etc/ssl/openssl.cnf,即 openssl 的配置文件路径并不一定适合所有系统,可以使用 find 命令找出自己系统中 openssl.cnf 的位置:

find / -name openssl.cnf

查看服务器证书信息

上述命令输入后,该有的文件就有了,可以看看最终的证书情况:

openssl x509 -noout -text -in server-cert.pem
...
X509v3 extensions:
X509v3 Subject Alternative Name:
DNS:*.lckiss.com, DNS:lckiss-otherhost.com
...

最终需要的是三个文件:ca.pem 、server-cert 、server-key.pem 。

配置 Docker 启动服务

vi /usr/lib/systemd/system/docker.service

找到ExecStart字段在-H之前加入以下配置:

--tlsverify --tlscacert=/path/to/ca.pem --tlscert=/path/to/server-cert.pem --tlskey=/path/to/server-key.pem -H tcp://0.0.0.0:port

重启 docker ,在 portainer 中配置 Endpoint 证书即可。

systemctl daemon-reload && systemctl restart docker

这部分可以参考旧文: Portainer 使用 TLS 加密连接远端节点上的 Docker

以上;

参考:

使用openssl创建包含SAN的证书

SAN证书(转载)的更多相关文章

  1. acme.sh建立SAN证书 和泛域名证书

    文件来源 https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert domain=$domain time=`date +%Y%m%d% ...

  2. [linux] centos搭建openvpn服务,脚本颁发/吊销证书 (转载+原创)

    搭建过程转载:http://yestreenstars.blog.51cto.com/1836303/1429537 环境说明:服务端:CentOS 6.5_X64客户端:Windows 7 服务端配 ...

  3. Nginx配置自签名的SSL证书(转载)

    要保证Web浏览器到服务器的安全连接,HTTPS几乎是唯一选择.HTTPS其实就是HTTP over SSL,也就是让HTTP连接建立在SSL安全连接之上. SSL使用证书来创建安全连接.有两种验证模 ...

  4. Windows Server 2008配置服务器证书[转载]

    备忘 http://wangchunhai.blog.51cto.com/225186/139451

  5. 申请免费通配符证书(Let's Encrypt)并绑定IIS(转载)

    本文转载自https://blog.csdn.net/qq_41608008/article/details/80491447 什么是 Let's Encrypt? 部署 HTTPS 网站的时候需要证 ...

  6. SSL证书的分类(按功能)

    SSL证书的分类(按功能) 一.域名型证书 DV SSL DV SSL 证书是 Domain Validation SSL Certificate 英文全称的简写,翻译成中文是域名型 SSL证书 或 ...

  7. 获取证书以用于 Windows Azure 网站 (WAWS)

    编辑人员注释:本文章由 Windows Azure 网站团队的项目经理 Erez Benari 撰写. 近年来,随着网络犯罪的上升,使用 SSL 保护网站逐渐成为一项备受追捧的功能,Windows A ...

  8. 阿里云负载均衡SSL证书配置

    阿里云负载均衡SSL证书 转载请注明地址:http://www.cnblogs.com/funnyzpc/p/8908461.html 好久了呢,距上篇博客的这段时间中:考试.搬家.工作赶工.业务考察 ...

  9. Windows Ubuntu Bash申请免费通配符证书(Let's Encrypt)并绑定IIS

    什么是 Let’s Encrypt? 部署 HTTPS 网站的时候需要证书,证书由 CA 机构签发,大部分传统 CA 机构签发证书是需要收费的,这不利于推动 HTTPS 协议的使用. Let’s En ...

  10. 用openssl为WEB服务器生成证书(自签名CA证书,服务器证书)

    用openssl为WEB服务器生成证书(自签名CA证书,服务器证书) 来源: https://www.cnblogs.com/osnosn/p/10608455.html 来自osnosn的博客 写于 ...

随机推荐

  1. CH340N串口无法检测问题的解决

    问题原因: type-C有好几种类型,其中包括能传输数据的,也有不能传输数据.只能供电的.(本质差别就是引脚数目不同) 问题解决:只要将原来的type-C转USB的充电线换成数据线,电脑就能识别CH3 ...

  2. ORACLE 数据库备份脚本(数据泵2-指定用户)

    #!/bin/bash export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK #定义字符集RQ=`date +20%y-%m-%d` #创建数据泵目录directory, ...

  3. GOF23种设计模式是哪些

    设计模式实践里面提供了许多经久不衰的解决方案和最佳方案.这里,GOF 设计模式主要分为三大类:创建模式.结构模式和行为模式.创建模式对于创建对象实例非常有用.结构模式通过处理类或对象的组合来作用于企业 ...

  4. kali Linux--打开&关闭防火墙

    1.安装ufw apt-get install ufw 2.关闭防火墙 ufw disable. 3.开启防火墙 ufw enable

  5. Coursera Programming Languages, Part C 华盛顿大学 Week 1

    来进入这一系列课程的最后一 Part 啦! \(P1\) 我们介绍了 \(ML\),一种 static typing 的 functional language \(P2\) 我们介绍了 \(Rack ...

  6. Flash、EEPROM、SRAM的区别与理解

    Flash.EEPROM.SRAM的区别与理解1. Flash.EEPROM.SRAM的区别(1) Flash存储器Flash适用于速度要求高.容量要求大.掉电时要求数据不丢失的场合. (2) EEP ...

  7. Flutter基于Mac的环境配置

    1.下载Flutter SDK git clone https://github.com/flutter/flutter.git 2.配置Flutter镜像+Flutter环境变量 ( 先创建.bas ...

  8. Unity中实现在规定时间内从一个值递增到另一个值

    1.进度条(在规定时间内完成进度条) private Image progressBar; private float currentProgress = 0; /// <summary> ...

  9. react 获取文件流导出功能

    记录一下: 根据后台接口返回的文件流,前端实现导出下载,使用(react+ts) 1.请求方法 (这里写法绕开拦截器) // 导出日志 export async function exportLog( ...

  10. C和C++内存分配语法补充

    NOTE: 动态内存分配:需要加载头文件<stdlib.h>malloc(m):开辟m字节长度的地址空间,并返回首地址sizeof(x):计算变量x的长度free(p):释放指针p所指的存 ...