diff --git a/README.md b/README.md index 54aab33a..06649393 100644 --- a/README.md +++ b/README.md @@ -1,140 +1,56 @@ # CertD -CertD 是一个帮助你全自动申请和部署SSL证书的工具。 +CertD 是一个免费全自动申请和部署SSL证书的工具。 后缀D取自linux守护进程的命名风格,意为证书守护进程。 ## 特性 本项目不仅支持证书申请过程自动化,还可以自动化部署证书,让你的证书永不过期。 * 全自动申请证书(支持阿里云、腾讯云、华为云注册的域名) -* 全自动部署证书(目前支持服务器上传部署、阿里云、腾讯云等) +* 全自动部署证书(目前支持服务器上传部署、部署到阿里云、腾讯云等) * 支持通配符域名 * 支持多个域名打到一个证书上 +* 邮件通知 +* 证书自动更新 -## 免费证书申请说明 + + +## 快速开始 + +官方Demo地址,自助注册后体验 + +https://certd.handsfree.work/ + +> 注意数据将不定期清理,生产使用请自行部署 +> 包含敏感信息,务必自行部署进行生产使用 + +## 快速开始 +本案例演示,如何配置每天自动申请证书,并部署到阿里云CDN,然后快要到期前自动更新证书并重新部署 + +![演示](./doc/images/5-view.png) + +[点我查看详细使用步骤演示](./step.md) + + +## 本地docker部署 + + + + +## 一些说明 +### 1. 免费证书申请 * 本项目ssl证书提供商为letencrypt * 申请过程遵循acme协议 -* 需要验证域名所有权,一般有两种方式(目前本项目仅支持dns-01) - * http-01: 在网站根目录下放置一份txt文件 - * dns-01: 需要给域名添加txt解析记录,泛域名只能用这种方式 +* 需要验证域名所有权,一般有两种方式(目前本项目仅支持dns-01) + * http-01: 在网站根目录下放置一份txt文件 + * dns-01: 需要给域名添加txt解析记录,泛域名只能用这种方式 * 证书续期: * 实际上acme并没有续期概念。 * 我们所说的续期,其实就是按照全套流程重新申请一份新证书。 * 免费证书过期时间90天,以后可能还会缩短,所以自动化部署必不可少 - - -## 快速开始 -本案例演示,如何配置自动申请证书,并部署到阿里云CDN,然后快要到期前自动更新证书并重新部署 - - -1. 环境准备 -安装[nodejs](https://nodejs.org/zh-cn/) - - -2. 生成node项目 - - 通过ui生成: https://certd.docmirror.cn/ - -开始生成证书,先填写域名,支持将多个域名打到一个证书上 -![](./doc/step1.png) - -配置证书详细信息 -![](./doc/step2.png) - -配置证书部署流程 -![](./doc/step3.png) - -配置好之后,点击导出按钮,导出一个node项目包 - -4. 运行 -将导出的压缩包解压,然后执行如下命令,即可开始申请证书并部署 -``` -npm install -npm run certd -``` -5. 执行效果 -生成的证书默认会存储在 `${home}/.certd/${email}/certs/${domain}/current`目录下 -``` -[2021-01-08T16:15:04.681] [INFO] certd - 任务完成 -[2021-01-08T16:15:04.681] [INFO] certd - ---------------------------任务结果总览-------------------------- -[2021-01-08T16:15:04.682] [INFO] certd - 【更新证书】--------------------------------------- [success] - 证书申请成功 -[2021-01-08T16:15:04.682] [INFO] certd - 【流程1-部署到阿里云CDN】---------------------------- [success] 执行成功 -[2021-01-08T16:15:04.682] [INFO] certd - └【上传到阿里云】-------------------------------- [success] 执行成功 -[2021-01-08T16:15:04.682] [INFO] certd - └【部署证书到CDN】------------------------------- [success] 执行成功 -``` -6. 证书续期 +### 2. 证书续期 实际上没有证书续期的概念,只有重新生成一份新的证书,然后重新部署证书 -所以每天定时运行即可,当证书过期日前20天时,会重新申请新的证书,然后执行部署任务。 - -7. 其他说明 -证书的部署任务执行后会记录执行结果,已经成功过的不会重复执行 -所以当你临时需要将证书部署到其他地方时,直接追加部署任务,然后再次运行即可 - -## CI/DI集成与自动续期重新部署 -集成前,将以上导出的node项目提交到内网git仓库,或者私有git仓库(由于包含敏感信息,不要提交到公开git仓库) - -### jenkins任务 -1. 创建任务 -选择构建自由风格的任务 - -2. 配置git -配置cert-run的git地址 - -3. 构建触发器 -配置 `H 3 * * *` ,每天凌晨3点-4点执行一次 - -4. 构建环境 -勾选 `Provide Node & npm bin/ folder to PATH`,提供nodejs运行环境 -如果没有此选项,需要jenkins安装`nodejs`插件 - -5. 构建 -执行shell -``` -npm install --production #执行过一次之后,就可以注释掉,加快执行速度 -npm run post -``` -6. 构建后操作 -邮件通知 -配置你的邮箱地址,可以在执行失败时收到邮件通知。 +所以每天定时运行即可,当证书过期日前20天时,会重新申请新的证书,然后自动执行部署任务。 -## API -先列个提纲,待完善 - -参数示例参考:https://gitee.com/certd/certd/blob/master/test/options.js - -### 授权提供者 -用于dns验证接口调用 -#### aliyun - -#### dnspod - -### deploy插件 -部署任务插件 -#### 阿里云 -##### 上传到阿里云 -type = uploadCertToAliyun -##### 部署到阿里云DNS -type = deployCertToAliyunCDN - -##### 部署到阿里云CLB -type = deployCertToAliyunCLB - -#### 腾讯云 -##### 上传到腾讯云 -type = uploadCertToTencent - -##### 部署到腾讯云DNS -type = deployCertToTencentDNS - -##### 部署到腾讯云CLB -type = deployCertToTencentCLB - -##### 部署到腾讯云TKE-ingress -type = deployCertToTencentTKEIngress - - -### 更多部署插件 -等你来提需求 diff --git a/doc/images/1-add.png b/doc/images/1-add.png new file mode 100644 index 00000000..2deaf39a Binary files /dev/null and b/doc/images/1-add.png differ diff --git a/doc/images/10-1-log.png b/doc/images/10-1-log.png new file mode 100644 index 00000000..507d36dc Binary files /dev/null and b/doc/images/10-1-log.png differ diff --git a/doc/images/11-1-error.png b/doc/images/11-1-error.png new file mode 100644 index 00000000..dc9f8c0f Binary files /dev/null and b/doc/images/11-1-error.png differ diff --git a/doc/images/11-2-error.png b/doc/images/11-2-error.png new file mode 100644 index 00000000..7fb4e895 Binary files /dev/null and b/doc/images/11-2-error.png differ diff --git a/doc/images/12-1-log-success.png b/doc/images/12-1-log-success.png new file mode 100644 index 00000000..fd8d2c61 Binary files /dev/null and b/doc/images/12-1-log-success.png differ diff --git a/doc/images/12-2-skip-log.png b/doc/images/12-2-skip-log.png new file mode 100644 index 00000000..cca26b3c Binary files /dev/null and b/doc/images/12-2-skip-log.png differ diff --git a/doc/images/13-1-result.png b/doc/images/13-1-result.png new file mode 100644 index 00000000..04feadda Binary files /dev/null and b/doc/images/13-1-result.png differ diff --git a/doc/images/13-2-result.png b/doc/images/13-2-result.png new file mode 100644 index 00000000..aabc1484 Binary files /dev/null and b/doc/images/13-2-result.png differ diff --git a/doc/images/13-3-download.png b/doc/images/13-3-download.png new file mode 100644 index 00000000..3a4a0cb7 Binary files /dev/null and b/doc/images/13-3-download.png differ diff --git a/doc/images/14-timer.png b/doc/images/14-timer.png new file mode 100644 index 00000000..f4612c56 Binary files /dev/null and b/doc/images/14-timer.png differ diff --git a/doc/images/15-1-email.png b/doc/images/15-1-email.png new file mode 100644 index 00000000..92301e45 Binary files /dev/null and b/doc/images/15-1-email.png differ diff --git a/doc/images/15-2-email.png b/doc/images/15-2-email.png new file mode 100644 index 00000000..82ba72ac Binary files /dev/null and b/doc/images/15-2-email.png differ diff --git a/doc/images/2-access-provider.png b/doc/images/2-access-provider.png new file mode 100644 index 00000000..cbd9e133 Binary files /dev/null and b/doc/images/2-access-provider.png differ diff --git a/doc/images/3-add-access.png b/doc/images/3-add-access.png new file mode 100644 index 00000000..563c95b6 Binary files /dev/null and b/doc/images/3-add-access.png differ diff --git a/doc/images/4-add-success.png b/doc/images/4-add-success.png new file mode 100644 index 00000000..57ecf83b Binary files /dev/null and b/doc/images/4-add-success.png differ diff --git a/doc/images/5-view.png b/doc/images/5-view.png new file mode 100644 index 00000000..d0016a73 Binary files /dev/null and b/doc/images/5-view.png differ diff --git a/doc/images/6-1-add-task.png b/doc/images/6-1-add-task.png new file mode 100644 index 00000000..d0d36233 Binary files /dev/null and b/doc/images/6-1-add-task.png differ diff --git a/doc/images/6-2-add-task.png b/doc/images/6-2-add-task.png new file mode 100644 index 00000000..6184f1e8 Binary files /dev/null and b/doc/images/6-2-add-task.png differ diff --git a/doc/images/6-3-add-task.png b/doc/images/6-3-add-task.png new file mode 100644 index 00000000..788a5196 Binary files /dev/null and b/doc/images/6-3-add-task.png differ diff --git a/doc/images/7-1-add-host-task.png b/doc/images/7-1-add-host-task.png new file mode 100644 index 00000000..ab334336 Binary files /dev/null and b/doc/images/7-1-add-host-task.png differ diff --git a/doc/images/7-2-add-host-task.png b/doc/images/7-2-add-host-task.png new file mode 100644 index 00000000..329232a9 Binary files /dev/null and b/doc/images/7-2-add-host-task.png differ diff --git a/doc/images/7-3-add-host-task.png b/doc/images/7-3-add-host-task.png new file mode 100644 index 00000000..fd81a7eb Binary files /dev/null and b/doc/images/7-3-add-host-task.png differ diff --git a/doc/images/8-1-add-host-task.png b/doc/images/8-1-add-host-task.png new file mode 100644 index 00000000..efa9de49 Binary files /dev/null and b/doc/images/8-1-add-host-task.png differ diff --git a/doc/images/8-2-add-host-task.png b/doc/images/8-2-add-host-task.png new file mode 100644 index 00000000..b3121568 Binary files /dev/null and b/doc/images/8-2-add-host-task.png differ diff --git a/doc/images/8-4-add-host-task.png b/doc/images/8-4-add-host-task.png new file mode 100644 index 00000000..9245d2f4 Binary files /dev/null and b/doc/images/8-4-add-host-task.png differ diff --git a/doc/images/8-5-add-host-task.png b/doc/images/8-5-add-host-task.png new file mode 100644 index 00000000..9cef545c Binary files /dev/null and b/doc/images/8-5-add-host-task.png differ diff --git a/doc/images/9-start.png b/doc/images/9-start.png new file mode 100644 index 00000000..18028bb5 Binary files /dev/null and b/doc/images/9-start.png differ diff --git a/doc/step1.png b/doc/step1.png deleted file mode 100644 index 294de109..00000000 Binary files a/doc/step1.png and /dev/null differ diff --git a/doc/step2.png b/doc/step2.png deleted file mode 100644 index 214746df..00000000 Binary files a/doc/step2.png and /dev/null differ diff --git a/doc/step3.png b/doc/step3.png deleted file mode 100644 index 8134d7ab..00000000 Binary files a/doc/step3.png and /dev/null differ diff --git a/doc/tasks.png b/doc/tasks.png deleted file mode 100644 index c31e7def..00000000 Binary files a/doc/tasks.png and /dev/null differ diff --git a/step.md b/step.md new file mode 100644 index 00000000..27d7679b --- /dev/null +++ b/step.md @@ -0,0 +1,97 @@ +# Certd演示示例 + +本示例演示从创建证书申请任务到自动部署证书全流程 + +## 准备工作 +1. 已部署CertD服务(可官方Demo自助注册体验 https://certd.handsfree.work/ ) +2. 注册一个域名(支持阿里云万网、腾讯云DnsPod、华为云) +3. 准备好以上DNS解析服务商的AccessKey 和 AccessSecret +4. 证书要部署的目标(可选,单纯当成证书申请工具用也不错) + +## 自动化流水线创建 + +### 1. 创建证书申请部署流水线 +![创建证书申请任务](./doc/images/1-add.png) + +需要添加域名的DNS解析服务商的授权 +![添加域名的DNS解析服务商的授权](./doc/images/2-access-provider.png) + +填写accessKey和accessSecret +![](./doc/images/3-add-access.png) +流水线创建成功 +![](./doc/images/4-add-success.png) + + +### 2. 任务详情界面 + +![](./doc/images/5-view.png) + +### 3. 添加部署到阿里云CDN任务 +添加任务步骤 +![](./doc/images/6-1-add-task.png) + +选择任务类型 +![](./doc/images/6-2-add-task.png) + +填写任务参数 +![](./doc/images/6-3-add-task.png) + +点击确定,部署到CDN任务配置成功 + +### 4. 添加部署到服务器主机任务 +点击新任务,弹出添加任务界面 +![](./doc/images/7-1-add-host-task.png) +先选择上传到主机任务 + +填写任务参数,比如证书保存路径 +![](./doc/images/7-2-add-host-task.png) + +需要添加主机ip、用户名、密码,只需添加一次,后续其他任务可以复用 +![](./doc/images/7-3-add-host-task.png) + +然后添加第二个任务,执行主机命令,部署证书 +![](./doc/images/8-1-add-host-task.png) + +选择执行脚本命令任务 +![](./doc/images/8-2-add-host-task.png) + +编写脚本,选择之前添加的主机 +![](./doc/images/8-4-add-host-task.png) + +点击确定,部署到主机任务配置成功 +![](./doc/images/8-5-add-host-task.png) + +### 5. 手动触发执行任务,测试一下 +![](./doc/images/9-start.png) + +点击任务可以查看状态和日志 +![](./doc/images/10-1-log.png) + +这里执行失败,可以查看错误日志 +![](./doc/images/11-1-error.png) +![](./doc/images/112-error.png) + +修改正确后,重新执行 +![](./doc/images/12-1-log-success.png) +可以看到前面执行过的就会跳过,不会重复执行 +![](./doc/images/12-2-skip-log.png) + +### 6. 查看证书部署效果 +可以看到证书已经部署到CDN成功 +![](./doc/images/13-1-result.png) +![](./doc/images/13-2-result.png) +也可以手动下载证书 +![](./doc/images/13-3-download.png) + +### 7. 定时触发 +配置定时触发,以后每天定时执行 +到期前20天会自动申请新证书并部署,没到期前不会重复申请 +![](./doc/images/14-timer.png) + +### 8. 邮件通知 +可以接收邮件通知(支持时机:开始、成功、失败、失败转成功) +![](./doc/images/15-1-email.png) +需要配置邮件服务器 +![](./doc/images/15-2-email.png) + +