1Introduction
- description:Easy Let’s Encrypt Visa(简洁的 Let’s Encrypt 签证)
- author:#云淡然 mailto:cloudcome@163.com (https://ydr.me/)
- github:https://github.com/nodejs-clis/lev
Let’s Encrypt 是一个于2015年三季度推出的数字证书认证机构,旨在以自动化流程消除手动创建和安装证书的复杂流程, 并推广使万维网服务器的加密连接无所不在,为安全网站提供免费的SSL/TLS证书。
-- 维基百科
elev 是基于开源模块而进行封装的 nodejs 命令行工具,主要实现 Let’s Encrypt 的 泛域名 DNS 记录验证方式(目前仅支持阿里云 DNS 服务商)的 SSL 证书的签发和自动续期。
2Install
npm install elev --global
3elev
➜ ~ elev
`7MM"""YMM `7MMF' `7MM"""YMM `7MMF' `7MF'
MM `7 MM MM `7 `MA ,V
MM d MM MM d VM: ,V
MMmmMM MM MMmmMM MM. M'
MM Y , MM , MM Y , `MM A'
MM ,M MM ,M MM ,M :MM;
.JMMmmmmMMM .JMMmmmmMMM .JMMmmmmMMM VF
Usages:
elev domain 列出当前已配置的域名
elev domain <domain> 新建或编辑域名配置文件
elev domain <domain> -r <reference>
参考指定域名进行新建或编辑配置文件
elev worker <ID> 查看指定 ID 的工作记录
Commands:
domain 域名配置相关
visa 签发一张 Let’s Encrypt 泛域名证书
cron 定时任务相关
schedule 定时计划相关
worker 定时任务工作
smtp SMTP 相关
version 输出版本号并检查更新
Options:
--version, -v, -V print version information
--help, -h, -H print help information
4Usages
4.1添加一个域名
➜ ~ elev domain example.com
`7MM"""YMM `7MMF' `7MM"""YMM `7MMF' `7MF'
MM `7 MM MM `7 `MA ,V
MM d MM MM d VM: ,V
MMmmMM MM MMmmMM MM. M'
MM Y , MM , MM Y , `MM A'
MM ,M MM ,M MM ,M :MM;
.JMMmmmmMMM .JMMmmmmMMM .JMMmmmmMMM VF
2018-08-29 16:54:06.956 当前域名 example.com
2018-08-29 16:54:06.959 /~/.elev/domains/example.com.ini
2018-08-29 16:54:06.961 即将进入编辑模式
这时候会弹出配置文件编辑模式:
; =================================
; 域名配置文件
; =================================
[ base ]
domain = example.com
emailAddress =
dnsRefreshSeconds = 120
dnsServerName = aliyun
dnsServerAccessKey =
dnsServerAccessSecret =
certificateKeyFileName = example.com.key
certificateCertFileName = example.com.pem
saveDirname = /etc/nginx/cert.d
afterSaveCommand = nginx -t && nginx -s reload
[ smtp ]
from = elev 命令执行报告<someone@example.com>
to = 姓名1<anyone1@example.com>, 姓名2<anyone2@example.com>
subject = elev 命令执行报告
host =
port = 465
secure = true
user =
pass =
修改相关配置保存即可。配置文件分成两个部分:
4.1.1base 部分
domain
:域名emailAddress
:邮件地址,证书签发需要邮箱账户(Let's Encrypt 官方要求)dnsRefreshSeconds
:DNS 刷新时间,证书签发等待刷新时间dnsServerName
:DNS 服务器名称,目前仅支持aliyun
dnsServerAccessKey
:DNS 访问 KEYdnsServerAccessSecret
:DNS 访问密钥certificateKeyFileName
:证书文件名certificateCertFileName
:证书文件名saveDirname
:证书保存目录afterSaveCommand
:证书保存后执行的命令,如果需要 root 权限,请以 root 权限执行 elev
4.1.2smtp 部分
证书签发结果会使用 smtp 进行邮件发送。
from
:邮件来源to
:邮件接收方,可以多个subject
:邮件主题host
:smtp 域名port
:smtp 端口secure
:是否采用安全协议user
:smtp 用户名pass
:smtp 密码
4.2验证 smtp
为了验证这个邮件发送的有效性,可以验证下:
➜ ~ elev smtp -d example.com
`7MM"""YMM `7MMF' `7MM"""YMM `7MMF' `7MF'
MM `7 MM MM `7 `MA ,V
MM d MM MM d VM: ,V
MMmmMM MM MMmmMM MM. M'
MM Y , MM , MM Y , `MM A'
MM ,M MM ,M MM ,M :MM;
.JMMmmmmMMM .JMMmmmmMMM .JMMmmmmMMM VF
2018-08-29 16:57:35.492 测试 smtp 邮件发送是否异常
2018-08-29 16:57:35.493 正在使用 阿里云企业邮箱 发送邮件
2018-08-29 16:57:35.930 测试邮件发送成功
2018-08-29 16:57:35.930 收件人 xxx@yyy.com
4.3泛域名签证
因为签证结束要执行相关命令(afterSaveCommand
通常是重启 nginx),
这时候需要命令执行的权限能够执行该命令,必要的时候需要添加 sudo 或者 root 权限下执行。
➜ ~ elev visa -d example.com
`7MM"""YMM `7MMF' `7MM"""YMM `7MMF' `7MF'
MM `7 MM MM `7 `MA ,V
MM d MM MM d VM: ,V
MMmmMM MM MMmmMM MM. M'
MM Y , MM , MM Y , `MM A'
MM ,M MM ,M MM ,M :MM;
.JMMmmmmMMM .JMMmmmmMMM .JMMmmmmMMM VF
2018-08-29 17:07:14.443 --------------------------
2018-08-29 17:07:14.444 Let’s Encrypt 证书签发开始
2018-08-29 17:07:14.444 调试模式 false
2018-08-29 17:07:14.444 签发域名 example.com
2018-08-29 17:07:14.445 开始读取配置文件
2018-08-29 17:07:14.453 创建私钥
2018-08-29 17:07:16.356 创建 Let’s Encrypt 账户
2018-08-29 17:07:17.687 创建 Let’s Encrypt 订单
2018-08-29 17:07:18.220 处理 Let’s Encrypt 订单
2018-08-29 17:07:18.508 需要验证 2 次
2018-08-29 17:07:18.511 第 1 次验证
2018-08-29 17:07:18.514 选择验证方式 dns-01
2018-08-29 17:07:18.516 应用验证方式
2018-08-29 17:07:18.516 验证查询地址 https://acme-v02.api.letsencrypt.org/acme/challenge/...
2018-08-29 17:07:18.520 添加 TXT 记录 wQjan6T4opcjbYSNaEUPpoF6pM2EIro5yOzRodmyq-o
2018-08-29 17:09:19.351 提交验证结果
2018-08-29 17:09:19.884 等待验证状态
2018-08-29 17:09:25.418 验证成功
2018-08-29 17:09:25.421 删除 TXT 记录
2018-08-29 17:09:25.944 第 2 次验证
2018-08-29 17:09:25.947 选择验证方式 dns-01
2018-08-29 17:09:25.948 应用验证方式
2018-08-29 17:09:25.950 验证查询地址 https://acme-v02.api.letsencrypt.org/acme/challenge/...
2018-08-29 17:09:25.955 添加 TXT 记录 KKGbscW5rXQ8ZCwRI3mBzNcWVwf36M3hMuYdxN8PxqM
2018-08-29 17:11:26.787 提交验证结果
2018-08-29 17:11:27.397 等待验证状态
2018-08-29 17:11:32.922 验证成功
2018-08-29 17:11:32.924 删除 TXT 记录
2018-08-29 17:11:33.326 创建 csr
2018-08-29 17:11:36.253 完成 Let’s Encrypt 订单
2018-08-29 17:11:38.192 获取 Let’s Encrypt 证书
2018-08-29 17:11:38.680 /etc/nginx/cert.d/beidoucheche.com.key
2018-08-29 17:11:38.689 文件保存成功
2018-08-29 17:11:38.689 /etc/nginx/cert.d/beidoucheche.com.pem
2018-08-29 17:11:38.690 文件保存成功
2018-08-29 17:11:38.691 nginx -t && nginx -s reload
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
2018-08-29 17:11:38.789 命令执行成功
2018-08-29 17:11:38.790 Let’s Encrypt 证书签发结束
2018-08-29 17:11:38.790 --------------------------
4.4添加定时任务
➜ ~ elev cron start
`7MM"""YMM `7MMF' `7MM"""YMM `7MMF' `7MF'
MM `7 MM MM `7 `MA ,V
MM d MM MM d VM: ,V
MMmmMM MM MMmmMM MM. M'
MM Y , MM , MM Y , `MM A'
MM ,M MM ,M MM ,M :MM;
.JMMmmmmMMM .JMMmmmmMMM .JMMmmmmMMM VF
2018-08-29 17:14:58.532 正在检查定时任务计划表达式
2018-08-29 17:14:58.534 正在启动定时任务
2018-08-29 17:14:58.537 daemon pid 37286
2018-08-29 17:14:58.539 定时任务启动成功
2018-08-29 17:14:58.540 启动周期 每月 1 日凌晨 4 点
2018-08-29 17:14:58.540 start at 2018-08-29 17:14:58.537
至此一个完成的域名签发、续期操作完成。
4.5添加更多域名
如果要添加新域名,仅参考已配置好的域名进行添加域名:
➜ ~ elev domain new-domain.com -r example.com
添加的新域名会被下一次定时任务自动收集。
5Dependencies
- acme-client
- blear.classes.class
- blear.classes.error
- blear.node.cli
- blear.node.console
- blear.node.path
- blear.node.request
- blear.utils.array
- blear.utils.date
- blear.utils.number
- blear.utils.object
- blear.utils.plan
- blear.utils.querystring
- blear.utils.random
- blear.utils.string
- blear.utils.time
- blear.utils.typeis
- fs-extra
- ini
- later
- nodemailer
- punycode