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

相关推荐
小时前端12 小时前
HTTPS 页面加载 HTTP 脚本被拦?同源代理来救场
前端·https
花酒锄作田5 天前
Gin 框架中的规范响应格式设计与实现
golang·gin
qwfys2005 天前
How to install golang 1.26.0 to Ubuntu 24.04
ubuntu·golang·install
赤月奇5 天前
https改为http
数据挖掘·https·ssl
codeejun6 天前
每日一Go-25、Go语言进阶:深入并发模式1
开发语言·后端·golang
石牌桥网管6 天前
Go 泛型(Generics)
服务器·开发语言·golang
小二·6 天前
Go 语言系统编程与云原生开发实战(第21篇)
开发语言·云原生·golang
小二·6 天前
Go 语言系统编程与云原生开发实战(第20篇)
开发语言·云原生·golang
女王大人万岁6 天前
Golang实战Eclipse Paho MQTT库:MQTT通信全解析
服务器·开发语言·后端·golang
codeejun6 天前
每日一Go-24、Go语言实战-综合项目:规划与搭建
开发语言·后端·golang