自动将 Let's encrypt,或其他网站证书推送到阿里云 CDN
更新于 2021 年 8 月 28 日
- 修复 Python3.9 下邮件发送问题
- 新增自定义证书路径配置,从上个版本更新的用户请在
cert.db
中, 为domain
表添加cert_path(VARCHAR(255),is_nullable:YES)
和private_key_path(VARCHAR(255),is_nullable:YES)
- 使用 configparse 管理配置文件,更新时请将
config-template.ini
复制一份改名为config.ini
并重新配置 - 可修改域名证书配置和用户信息
- 支持 Docker 部署
- Docker 容器自动配置定时任务,每天 01:00 执行更新,日志自动记录在 cdncert.log
更新于 2019 年 7 月 8 日
-
支持多 RAM 账号。
即当您有多个网站存在于同一个服务器上,且多个网站部署CDN时使用的不是同一阿里云账号时, CDN Cert 可以向多个阿里云账号推送续签后的证书。
-
完全迁移至 Python 3.7
定期[1]对比存储在本机的证书与上一次推送成功的证书的 MD5
如有差异则将新证书推送到 CDN
使用 SQLite3 做为数据库,并支持阿里云邮件推送服务,如有更新可以将推送结果发送到您的邮箱。
-
准备
git clone https://github.com/0xJacky/cdn_cert.git
-
配置将
config-template.ini
复制一份并命名为config.ini
-
运行 Docker
docker run -dit -v ${配置和数据库文件目录}:/app/data \ -v ${证书文件夹的绝对路径}:/cert \ --name=cdn_cert -e "TZ=Asia/Shanghai" \ uozi/cdn_cert /bin/bash
-
修改配置后使用
docker restart cdn_cert
重启容器。 -
进入容器配置域名及用户信息
docker exec -it <image_id> /bin/bash
-
注意映射目录后进入 docker 内配置自定义证书的路径,此路径是容器内的绝对路径。
- 准备
git clone https://github.com/0xJacky/cdn_cert.git pip3 install -r requirements.txt
- 将
config-template.ini
复制一份并命名为config.ini
配置项 | 默认值 | 说明 |
---|---|---|
database.Path | cert.db | 指定数据库存储的地址,相对路径 |
letencrypt.Path | /cert | Let's encrypt 证书目录,使用 Docker 模式时将证书文件夹的绝对路径映射到 /cert 即可,可以不修改此项 |
letencrypt.ServerCertificateName | fullchain.cer | 如果您使用的是 Let's encrypt 官方的 certbot 则无需修改此项 |
letencrypt.PrivateKeyName | {{ domain_name }}.key | PrivkeyName 提供变量 {{ domain_name }} 例如,使用 acme.sh 管理证书的用户,生成的私钥名称与域名相同,则应该设置为 PrivkeyName = {{ domain_name }}.key |
mail.Host | smtpdm.aliyun.com | 邮件反馈设置 - 阿里云邮件推送服务 |
mail.Port | 465 | 发信端口,除 80 端口外默认使用 SSL |
mail.UserName | - | 发件人地址,通过控制台创建的发件人地址 |
mail.PassWord | - | 发件人密码,通过控制台创建的发件人密码 |
mail.From | - | 发件人昵称 |
mail.To | - | 收件人地址,支持多个收件人,最多30个,以 , 分割 |
-
用法
-h/ --help
usage: cdncert.py [-h] [-f] [-o ONLY] [-a {domain,user}] [-e {domain,user}] [-d {domain,user}] [-ls {domains,users}] [-v] CDN Cert - Automatically push the new certificates to CDN optional arguments: -h, --help show this help message and exit -f, --force force update -o ONLY, --only ONLY update only, use it after -f/--force -a {domain,user}, --add {domain,user} add [domain/user] to database -e {domain,user}, --edit {domain,user} edit [domain/user] in database -d {domain,user}, --delete {domain,user} delete [domain/user] from database -ls {domains,users}, --list {domains,users} print all [domains/users] from database -v, --verbosity increase output verbosity
-
添加用户信息
-a user
-
添加域名信息
-a domain
-
编辑用户
-e user
-
编辑域名
-e domain
-
删除用户
-d user
-
删除域名
-d domain
-
列出所有域名/用户
-ls users/domains
-
开发模式
-v
-
强制更新
-f
-
仅更新单个域名
-f -o {doamain}
-
推送成功的邮件模板
-
定时配置(Docker 无需配置)
crontab -e
# 每天 3:30 执行
30 3 * * * python3 /path/to/cdncert.py
Copyright © 2017 - 2024 0xJacky
The program is distributed under the terms of the GNU Affero General Public License.
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along with this program. If not, see http://www.gnu.org/licenses/.