碎碎念

自从2023年开始,免费的SSL证书有效期逐渐都变成了三个月时长,从那之后,换证书就变成了一件麻烦事,经常会因为忘记而导致站点无法访问,于是市面上涌现出了一大批的自动化工具,比如ACME.shCertbot等工具,但是或多或少配置起来都比较麻烦,有较高的门槛。

2024年8月21日,Certimate工具秉持着可视化申请并部署证书的原则,创建了仓库,经过了一千多次的提交,目前v0.3已经较为成熟,虽然稍微有些小问题,但是不影响其功能性的强大。这篇文章就给大家介绍一下,如何去使用Certimate工具自动化申请并部署证书到指定平台上。

简介

申请并部署证书的过程虽然不复杂,但是对于很多服务的站长来说,一个个部署的话还是很麻烦的,Certimate可以通过不同平台提供的API,自动化检测域名到期时间,并自动申请部署,解放了双手,同时不会出现由于忘记续期导致的网站无法访问问题。

内存占用

由于Certimatego语言开发,内存占用极少,正常情况下仅会占用20MB左右的内存,几乎所有服务器均能无压力的运行这个服务,而同样功能的Certd项目,可能是因为定位不同,添加了多用户等其他功能,导致内存占用远超Certimate项目,正常情况下会占用150MB左右的内存,所以如果是个人使用,我个人更加建议使用Certimate

内存占用

支持平台

Certimate项目支持部署到很多平台,大概列表如下:

类别平台 / 服务
本地部署本地部署
SSH 部署SSH 部署
WebhookWebhook
KubernetesSecret
阿里云对象存储 OSS, 内容分发网络 CDN, 全站加速 DCDN, 边缘安全加速 ESA, 传统型负载均衡 CLB, 应用型负载均衡 ALB, 网络型负载均衡 NLB, Web 应用防火墙 WAF, 视频直播 Live, 视频点播 VOD, 证书管理 CAS
腾讯云对象存储 COS, 内容分发网络 CDN, 全站加速网络 ECDN, 边缘安全加速 EdgeOne, 负载均衡 CLB, Web 应用防火墙 WAF, 云直播 CSS, 云点播 VOD, SSL 证书服务
华为云内容分发网络 CDN, 弹性负载均衡 ELB, Web 应用防火墙 WAF
百度智能云内容分发网络 CDN
火山引擎对象存储 TOS, 内容分发网络 CDN, 全站加速 DCDN, 负载均衡 CLB, 图片服务 ImageX, 视频直播 Live
京东云应用负载均衡 ALB, 内容分发网络 CDN, 视频直播, 视频点播
七牛云内容分发网络 CDN, 视频直播 Pili
白山云内容分发网络 CDN
多吉云内容分发网络 CDN
BytePlus内容分发网络 CDN
优刻得对象存储 US3, 内容分发 UCDN
AWSCloudFront
CacheFlyCacheFly
CdnflyCdnfly
EdgioApplications
Gcore内容分发网络 CDN
宝塔面板网站, 面板
雷池雷池

可见支持的平台还是很多,感谢社区和作者的贡献,相比之下,同类型产品Certd的宝塔部署是需要收费购买专业版才可以使用的。

证书种类

Certimate支持三种证书,Let's encryptZeroSSLGoogle,以下是三种证书的差别:

对比项Let’s EncryptZeroSSLGoogle Trust Services
国内直连✅(可直连,但部分地区偶尔不稳定)✅(国内直连稳定)❌(需要国外环境)
安卓兼容性⚠️(部分旧版安卓系统不支持 DST Root CA X3)✅(正常)✅(正常)
签发机构ISRG (Internet Security Research Group)Sectigo 提供支持Google Trust Services
根证书ISRG Root X1 (兼容性受限于 DST Root CA X3)Sectigo RSA / ECCGlobalSign Root CA
证书有效期90 天90 天90 天
自动续签✅(需 ACME 客户端,如 certbot)✅(支持 ACME,官方提供 API)✅(支持 ACME,Google Cloud 生态内无缝集成)
适用场景个人网站、博客、小型项目国内企业、个人站点、API 服务海外服务器、大型企业、Google 生态
推荐用户✅ 国内用户次选✅ 国内用户首选✅ 海外服务器首选
优点免费,开源社区支持广泛兼容性更好,国内直连稳定Google 官方,信誉度高,全球兼容性最佳
缺点安卓旧版本兼容性问题需国外服务器,国内网络环境难以获取

基于以上的对比,我推荐国内用户选择ZeroSSL,如果有国外环境,选择Google,当然Lets encrypt的兼容性问题在网站上丝毫不会展现出来,完全不会有任何区别,也可以放心使用。

通知方式

如果证书到期了,但是你的工作流没有正常执行,Certimate还会通过各种方式向你提醒,支持的通知渠道如下:

通知渠道

这里因为我只用了一个邮箱,所以不再详细讲解。

教程

下面我们就开始讲解如何使用Certimate啦!这部分我将分成两部分,一部分为部署和简单使用教程,另一部分为自动部署配置教程,下面我们先开始部署和简单使用教程。

部署和使用

部署

这里我选择最简单的docker-compose方式进行部署,在服务器的任意目录创建docker-compose.yaml文件,写入以下内容:

1
2
3
4
5
6
7
8
9
10
version: "3.0"
services:
certimate:
image: usual2970/certimate:latest # usual2970/certimate:v0.3.0-alpha.10
container_name: certimate_server
ports:
- 7003:8090
volumes:
- ./data:/app/pb_data
restart: unless-stopped

在当前目录下执行以下命令:

1
2
docker-compose pull    # 强制拉取最新镜像
docker-compose up -d # 根据配置创建容器

后续有新版本后也是在同样位置执行以上两个命令即可,然后配置反代,将本地的127.0.0.1:7003端口映射到域名上,即可正常打开域名访问了。

使用

初始的管理员账号及密码分别为:

  • 账号:admin@certimate.fun
  • 密码:1234567890

登录进去后,可以在右上角设置中修改登录账号和登录密码,这里不再细讲。

修改账户和密码

可以看到以上图片中,除了账号和登录密码,还有一个是证书颁发机构。

  1. Let's Engrypt不需要填写任何信息即可直接保存,点击保存即为使用该证书。

  2. ZeroSSL需要申请EAB KIDEAB HMAC Key,这里我们先通过一下地址进行注册并登录到控制面板,当然如果有账户直接登录即可:

    登录成功后,点击进入ZeroSSL开发者地址并在下面的EAB Credentials for ACME Clients点击Generate按钮,一切正常的话,就可以看到两个值了,我们填入Certimate并保存即可。

    生成EAB

  3. Google SSL虽然也需要填写EAB,但是由于国内无法正常访问,所以这里我不讲解具体怎么生成,如果有需要,大家可以看以下文章:

添加并选择了证书颁发机构,就可以开始部署了,点击左侧菜单的工作流,新建工作流,并选择标准模板,进入后可以看到一套标准的流程。

工作流配置

只需要按照要求一步步配置即可,在开始中可以设置是定时任务还是手动执行,申请部分需要选择DNS服务商才可以正确申请,邮箱填写注册ZeroSSL的账户邮箱即可。

v0.3.0版本问题

v0.3.0中,不要创建并行分支,可以串行执行所有任务,可以创建结果分支,作者已经知晓该bug,在后面的版本将会解决,目前基本不影响使用。

部署配置

这里我简单介绍一下我所用的部署配置,我需要的部署配置列表如下:

  • 宝塔面板
  • 兰亭雷池
  • 多吉云CDN
  • ADGuard Home加密证书

大家可以按照需求自行跳转查看。

宝塔面板

在设置中,添加API接口,设置好域名白名单,也就是certimate所部署服务器的公网IP,通过API达到更新证书的目的,这里我推荐将宝塔面板使用Nginx的反向代理代理到一个域名中,并绑定SSL,防止因为宝塔自身SSL安全机制导致无法正确请求接口,注意反向代理的源地址协议,可能是HTTPS,自行尝试即可。

宝塔开启API

获取到了API地址,在Certimate左侧授权管理中,添加宝塔面板,地址推荐反代后的https地址,然后在对应的工作流中,添加宝塔面板,网站类型按照情况选择,这里我选择PHP,并填入网站名称,通常就是你的网站域名,可以在网站页面查看。

添加工作流

如果一切顺利的话,宝塔面板就可以正常部署了。

兰亭雷池

雷池同以上宝塔面板,建议使用自带的反向代理将雷池控制面板映射到公网域名上,既加固了安全性,又更加方便访问,同时可以通过雷池自带的防御给雷池页面添加人机验证。

然后在系统设置中即可看到API Token

雷池申请API

获取到之后,填写到Certimate的授权管理中,然后返回到工作流,添加雷池部署,可以看到,还需要一个证书ID的选项,我们返回到雷池面板,点击证书管理,此时点击F12记录网络请求,点击一个证书的编辑页面,随意修改证书和私钥,一定不要是正确的,胡写即可,然后点击提交,如下图所示:

证书ID获取方式

在控制台->网络中可以找到一个报错的,点击载荷,即可看到该证书的ID,如法炮制,即可获得所有证书的ID,然后在工作流中,我们选择替换指定证书方式,即可完成雷池的自动部署。

雷池自动部署

多吉云

多吉云并没有什么难点,只需要在用户中心,密钥管理中,获取AccessKeySecretKey,然后一个个网站依次更新即可,注意,一个部署工作仅能部署一个网站,所以可以创建多个工作来实现所有的部署。

ADGuard Home

ADGuard Home是自建免广告DNS的工具,由于我需要在安卓手机上替换私人DNS,所以只能使用ZeroSSL的证书才能使安卓信任,在ADGuard Home的加密设置中,我们可以看到,证书可以通过本地文件进行部署,所以我们想更新证书时,只需要通过替换文件,即可达到证书的更新。

ADGuard Home加密设置

修改docker-compose.yaml文件,添加挂载路径:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
networks:
1panel-network:
external: true
services:
adguardhome:
container_name: ${CONTAINER_NAME}
deploy:
resources:
limits:
cpus: ${CPUS}
memory: ${MEMORY_LIMIT}
image: docker.1panel.live/adguard/adguardhome
labels:
createdBy: Apps
networks:
- 1panel-network
ports:
- ${HOST_IP}:${PANEL_APP_PORT_DNS}:53/tcp
- ${HOST_IP}:${PANEL_APP_PORT_DNS}:53/udp
- ${HOST_IP}:${PANEL_APP_PORT_DHCP_1}:67/udp
- ${HOST_IP}:${PANEL_APP_PORT_DHCP_2}:68/udp
- ${HOST_IP}:${PANEL_APP_PORT_HTTP_1}:80/tcp
- ${HOST_IP}:${PANEL_APP_PORT_DOH}:443/tcp
- ${HOST_IP}:${PANEL_APP_PORT_DOH}:443/udp
- ${HOST_IP}:${PANEL_APP_PORT_HTTP}:3000/tcp
- ${HOST_IP}:${PANEL_APP_PORT_DOT}:853/tcp
- ${HOST_IP}:${PANEL_APP_PORT_QUIC_1}:784/udp
- ${HOST_IP}:${PANEL_APP_PORT_DOT}:853/udp
- ${HOST_IP}:${PANEL_APP_PORT_QUIC_2}:8853/udp
- ${HOST_IP}:${PANEL_APP_PORT_DNS_CRYPT}:5443/tcp
- ${HOST_IP}:${PANEL_APP_PORT_DNS_CRYPT}:5443/udp
restart: always
volumes:
- ./data/work:/opt/adguardhome/work
- ./data/conf:/opt/adguardhome/conf
+ - ./data/cert:/opt/adguardhome/cert

然后在当前目录下创建./data/cert,将证书放到以下目录下,重新构建docker,然后进入加密设置中,用文件地址来设置证书。

然后在certimate中,使用SSH部署的方式,即可替换对应文件到指定目录下,实现证书的更新。

至此,本站所有服务均接入Certimate证书更新

总结

随着SSL证书有效期的缩短,站长们面临着频繁更新证书的挑战。Certimate的出现,为此提供了有效的解决方案。作为一款开源的SSL证书管理工具,Certimate能够自动申请、部署和续期证书,简化了证书管理流程,确保网站的持续安全。其私有部署的特性,保障了数据的安全性和隐私性。同时其低占用率,使其几乎没有运维难度,门槛也大幅降低。

通过使用Certimate,站长们可以将更多精力投入到网站运营和内容优化上,而无需担心证书管理的繁琐事务。这使得网站维护更加高效,安全性得到了保障,同时,站长也有了更多的时间创作更加优质的文章。

每日一图

图片来自哲风壁纸

吊床