多域名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

相关推荐
Tony Bai7 小时前
再见,丑陋的 container/heap!Go 泛型堆 heap/v2 提案解析
开发语言·后端·golang
念何架构之路9 小时前
Go进阶之panic
开发语言·后端·golang
先跑起来再说9 小时前
Git 入门到实战:一篇搞懂安装、命令、远程仓库与 IDEA 集成
ide·git·后端·elasticsearch·golang·intellij-idea
Tony Bai18 小时前
“Go 2,请不要发生!”:如果 Go 变成了“缝合怪”,你还会爱它吗?
开发语言·后端·golang
灰子学技术1 天前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
源代码•宸1 天前
大厂技术岗面试之谈薪资
经验分享·后端·面试·职场和发展·golang·大厂·职级水平的薪资
win x2 天前
深入理解HTTPS协议加密流程
网络协议·http·https
仙俊红2 天前
从 Filter / Interceptor 到 HTTPS
网络协议·http·https
游戏开发爱好者82 天前
日常开发与测试的 App 测试方法、查看设备状态、实时日志、应用数据
android·ios·小程序·https·uni-app·iphone·webview
2501_915106322 天前
app 上架过程,安装包准备、证书与描述文件管理、安装测试、上传
android·ios·小程序·https·uni-app·iphone·webview