初次接触SSL证书是在腾讯云( DNSPod)平台,那时每三个月就要手动重新申请一次。起初还能耐心操作,但自从体验了 CloudFlare 的自动化服务后,这种重复劳动就显得格外繁琐。于是我开始寻找自动续费的解决方案,最终成功实现了证书的自动化管理。本文将分享我的具体实现方法

本文介绍的两种方案均支持申请泛域名证书。

自动续费

最初在网上搜索方案时,找到的大多是通过 acme.sh 脚本实现的教程。但在实践过程中,意外发现我的服务器面板工具(1Panel)已经内置了证书申请功能( Lego 插件)。经过对比测试,最终选择了这个集成度更高、操作更便捷的解决方案

acme.sh

acme.sh 实现了 acme 协议,可以从 ZeroSSLLet's Encrypt 等 CA 生成免费的证书 开源地址

这里简单记录一下我使用docker运行,后续真正使用再补充:

services:
  acme-sh:
    image: neilpang/acme.sh
    container_name: acme.sh
    volumes:
      - ./out:/acme.sh
    network_mode: host
    command: daemon
    stdin_open: true
    tty: true
    restart: no

使用 docker exec 运行 acme.sh 命令:

docker exec acme.sh --help
docker exec acme.sh --issue -d example.com --standalone

1Panel

具体操作非常直观,只需按照面板的可视化指引逐步操作:

  1. 创建DNS服务商API账户(用于域名验证)

  2. 配置ACME账户(用于证书签发)

  3. 发起证书申请流程

需要注意的是,在申请过程中可能会遇到验证超时的情况。此时通常有两种解决方案:

  • 修改 DNS服务器114.114.114.114 或者其他

  • 启用 跳过DNS验证 选项(部分证书类型适用)者跳过DNS校验

申请成功后直接可以在网站https选项中选择证书。

部署

由于我的域名托管在腾讯云平台,因此基于腾讯云API 3.0开发了自动化证书管理功能,主要实现了以下操作:

  1. SSL证书自动上传至云平台

  2. CDN服务的证书一键更换

  3. 删除过期证书

涉及到的函数如下:

SSL:

DescribeCertificate 获取证书信息

DescribeCertificates 获取证书列表

UploadCertificate 上传证书

DeleteCertificate 删除证书

CDN:

DescribeCertDomains 用于校验SSL证书并提取证书中包含的域名

UpdateDomainConfig 修改内容分发网络加速域名配置信息