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

相关推荐
TlSfoward3 小时前
TLSFoward 能帮你看到什么 TLSFOWARD抓包工具
服务器·爬虫·网络协议·https
2501_916007474 小时前
Python实现HTTPS爬虫的完整指南:使用requests、BeautifulSoup、Selenium和Scrapy
爬虫·python·ios·小程序·https·uni-app·iphone
北冥you鱼6 小时前
Go语言四则运算实战:从基础类型到big包的深度解析
开发语言·后端·golang
Wang's Blog15 小时前
Go-Zero 项目开发47:自研微服务框架的必要性与核心结构设计
开发语言·微服务·golang
名字还没想好☜21 小时前
Go 用 bufio.Scanner 读大文件踩坑:默认 64KB 行上限、Buffer 扩容与按 Token 切分
开发语言·后端·golang·go
techdashen1 天前
Go设计取舍之六: sync.Mutex正常模式与饥饿模式
开发语言·后端·golang
AI人工智能+电脑小能手1 天前
【大白话说Java面试题 第211题】【10_网络协议篇】第2题:说一下什么是 HTTP 协议?
java·网络协议·http·https·web通信
北冥you鱼1 天前
Go语言数组越界处理机制详解:从编译时检查到运行时panic
java·python·golang
FfHUCisI1 天前
Golang - 贪心算法 — 局部最优推导全局最优
贪心算法·golang·代理模式
立心者02 天前
Golang基础笔记十五之sync
开发语言·笔记·golang