9 个版本
0.6.11 | 2024 年 5 月 23 日 |
---|---|
0.6.9 | 2023 年 5 月 15 日 |
0.6.1 | 2023 年 4 月 24 日 |
172 在 异步
537 每月下载量
41KB
834 行
CertsD
CertsD-open - 开源、自动化、异步 LE 证书颁发者
作者
Daniel (@dmilith) Dettlaff
功能
-
为根域名及其通配符版本生成单独的证书。
-
使用 RON 格式的配置。
-
支持多个 CloudFlare 账户以及一次性多个域名/区域。
-
通过 CloudFlare API 自动管理 DNS TXT 记录。
-
成功续期后通过 Webhook 通知 Slack。
-
默认异步。
从配置文件读取需求
-
CloudFlare API 令牌(具有“编辑区域 DNS”权限)。
-
CloudFlare 区域 ID
-
一个域名
工作流程详解
-
CertsD 从 现有路径之一 读取输入配置。
-
ACME 注册过程从当前工作目录开始。
-
尝试重用所有不存在的密钥文件(
account.key
+example.com/domain.key
+wild_example.com/domain.key
)或自动生成它们。 -
验证两个证书的到期日期(
example.com/chained.pem
和wild_example.com/chained.pem
)。默认情况下,ACME 提供有效期为 90 天的证书。基于此,CertsD 只会续期剩余有效期少于 60 天的证书。 -
ACME 流程创建 DNS 挑战。
-
使用 CF API 创建给定域名的 DNS TXT 记录(具有挑战值)。
-
等待 ACME 响应的订单确认。
-
使用 CF API 删除给定域名的 DNS TXT 记录。
-
在订单确认后,从ACME获取(
example.com/chained.pem
+wild_example.com/chained.pem
)。
关于ACME服务的几点说明
-
CertsD的稳定性依赖于ACME服务的稳定性。不要惊慌,请耐心等待。
-
有时ACME API会随机返回“无效”状态,原因不明。不要惊慌,请耐心等待。
-
如果您不会频繁地删除以下之一(
account.key
+
example.com/domain.key+
wild_example.com/domain.key`),ACME可能会在没有问题的情况下更快地续订您的证书(ACME证书缓存机制)。 -
如果您想使用ACME Staging进行测试,请将配置文件中的
acme_staging: true
设置为true。
软件要求
- Rust >= 1.68.2
- OpenSSL >= 1.1.1t
额外的构建要求
- Clang >= 6.x
- Make >= 3.x
- Cmake >= 3.16
- Perl >= 5.x
- Patchelf > 0.17
- POSIX兼容的基本系统(已在FreeBSD/ HardenedBSD/ Darwin和Linux系统上测试)
生产配置
注意:我将配置保存在
/Services/Certsd/service.conf
下,所有密钥和生成的证书在/Services/Certsd
下。
(
acme_staging: false,
accounts: [
(
cloudflare_api_token: "cloudflare-api-token",
cloudflare_zone_id: "cloudflare-zone-id",
domain: "myexample.com",
contacts: ["[email protected]"],
),
// …
],
notifications: [
Slack(webhook: "https://hooks.slack.com/services/111111111/33333333333/44444444444444444"),
Telegram(
chat_id: "@Public_Channel",
token: "1111111111111111111111111111111"
),
// …
]
)
生产cron条目示例
# run certsd every 10 days, 30 minutes before midnight:
30 23 */10 * * "/Software/Certsd/exports/certsd >> /var/log/renew-example.com.log"
示例Nginx代理配置(将生成的chained.pem
服务到远程主机)
server {
listen 80;
server_name my.example.com;
autoindex off;
location ~ .*/chained.pem {
root /etc/certsd/certs;
}
location / {
deny all;
}
}
依赖项
~16–29MB
~468K SLoC