多域名TLS 证书的自动签名和续期

一个网站如果不使用 https ,既不能保证数据的安全,又显得很不正规。

letsencrypt 官网提供了一些客户端和各类开发语言实现的 ACMEv2 API。

官方比较推荐 Certbot 客户端还有 acme.sh shell 开发的客户端。

这些客户端通常需要在终端命令行下,进行交互式的调用,完成证书的申请或者续期。

一、本项目使用 go 语言自带的 autocert ,通过配置实现自动的、非交互式的证书自动申请和续期

  • 这是一个docker镜像,启动即可自动完成域名证书自动化申请和续期。
  • 非常适合自动化部署。

1、只需 1个配置文件

只需要把需要签名的域名填写到 conf/domains.txt 文件中,启动docker就可以完成自动签名和续期的工作。

2、配置文件说明

domains.txt 支持一行单个域名和多个域名,多个域名之间可以用一个或多个空格间隔。

如需定制,可以将config.conf.example 改名为 config.conf,并参考 config.conf.example 的说明进行修改。

配置文件保存在 /conf 路径下,需要把自己的 domains.txt 保存在 /conf 中并挂载到容器上。

签名的结果保存在 /cert-cache 路径下,如需要持久保存,也需要一个路径挂载到容器上。

二、直接使用

docker 复制代码
docker run -p 80:80 -p 443:443 -v /data/volumes/configable-auto-cert/cert-cache:/cert-cache -v /data/volumes/configable-auto-cert/conf:/conf -v /etc/localtime:/etc/localtime:ro -v /etc/timezone:/etc/timezone:ro --label description="自动签名续期" --label 启动日期="2025-11-29"  -d --name conf-auto-cert  configable-auto-cert

三、使用脚本启动

进入含有 cert-cache 和 conf 文件夹的路径,执行下面的脚本。

bash 复制代码
#!/bin/bash
INSTANCE_NAME="conf-auto-cert"
IMAGE_NAME="configable-auto-cert"
BASE_PATH=$(pwd)
docker run -p 80:80 -p 443:443 -v  ${BASE_PATH}/cert-cache:/cert-cache -v ${BASE_PATH}/conf:/conf -v /etc/localtime:/etc/localtime:ro -v /etc/timezone:/etc/timezone:ro --label description="自动签名续期" --label 启动日期="2025-11-29"  -d --name ${INSTANCE_NAME}  ${IMAGE_NAME}

四、在域名列表保持不变的情况下,构建包含自己域名数据的docker镜像

把domains.txt保存在当前路径下 conf/ 目录下,

dockerfile 复制代码
FROM configable-auto-cert:latest
COPY conf /conf

五、构建定制域名的docker镜像

bash 复制代码
docker build -t my-custom-autocert .

六、启动镜像

bash 复制代码
docker run -p 80:80 -p 443:443 -v /data/volumes/configable-auto-cert/cert-cache:/cert-cache -v /etc/localtime:/etc/localtime:ro -v /etc/timezone:/etc/timezone:ro --label description="自动签名续期" --label 启动日期="2025-11-29"  -d --name my-cert my-custom-autocert  

七、构建自己docker镜像的好处

  • 把域名列表保存在git服务器的项目中,修改域名列表,提交到 git上,同时触发jenkins git push 事件,实现docker镜像的重新构建并重新部署。

  • 只有域名没有变化,镜像可以长期的重复使用。

八、输出的 /cert-cache 可供 nginx 使用

输出的 /cert-cache 包含每个域名的私钥和公钥,可以直接在启动nginx时进行路径映射。

复制代码
docker run -d -p 80:80 -p 443:443  --label startDate="2025-11-13" --name somenginx -v /data/volumes/n-nginx/log:/var/log/nginx -v /data/volumes/n-nginx/html:/usr/share/nginx/html -v /etc/localtime:/etc/localtime:ro -v /data/volumes/n-nginx/conf.d:/etc/nginx/conf.d -v /data/volumes/configable-auto-cert/cert-cache:/etc/letsencrypt nginx

九、源码地址

https://github.com/golangle/configable-auto-cert

相关推荐
古城小栈5 小时前
Go+Rust混合编程:高性能系统开发的最优解之一
golang·rust
古城小栈5 小时前
Go 语言容器感知,自动适配 K8s 资源限制
golang·kubernetes
海上彼尚9 小时前
Go之路 - 7.go的结构体
开发语言·后端·golang
源代码•宸14 小时前
分布式缓存-GO(分布式算法之一致性哈希、缓存对外服务化)
开发语言·经验分享·分布式·后端·算法·缓存·golang
半桶水专家21 小时前
GORM 结构体字段标签(Struct Tags)详解
golang·go·gorm
GokuCode21 小时前
【GO高级编程】05.类的扩展与复用
golang·embedding·xcode
Tony Bai1 天前
Jepsen 报告震动 Go 社区:NATS JetStream 会丢失已确认写入
开发语言·后端·golang
bing.shao1 天前
Golang 之 defer 延迟函数
开发语言·后端·golang
penngo1 天前
Golang使用Fyne开发桌面应用
开发语言·后端·golang