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

相关推荐
添尹7 小时前
Go语言基础之变量和常量
golang
参.商.12 小时前
【Day43】49. 字母异位词分组
leetcode·golang
参.商.13 小时前
【Day45】647. 回文子串 5. 最长回文子串
leetcode·golang
AMoon丶15 小时前
Golang--内存管理
开发语言·后端·算法·缓存·golang·os
huohaiyu16 小时前
HTTPS的加密流程
网络协议·http·https
lars_lhuan16 小时前
Go Context
golang
AMoon丶16 小时前
Golang--垃圾回收
java·linux·开发语言·jvm·后端·算法·golang
Dylan~~~17 小时前
Go语言Web框架选型指南:从入门到精通
开发语言·前端·golang
德迅云安全杨德俊17 小时前
直面 DDoS 威胁:从现状到解决方案
网络·安全·web安全·https·ddos
hongtianzai17 小时前
Laravel7.x十大核心特性解析
java·c语言·开发语言·golang·php