前言
Let's Encrypt
在近两年的发展中十分迅速. 官方在2016年3月8日宣布签发证书达到一百万张后( Our Millionth Certificate ), 在一年半后的2017年6月28号便宣布签发证书达到了一亿张( Milestone: 100 Million Certificates Issued ).
官方也宣布在2018年一月份(鸽了,三月份)开始支持签发泛域名证书( Wildcard Certificates Coming January 2018 ),在使用和部署上会变得更加方便.
官方的签发工具是 certbot
,它可以启动一个 Web 服务器来验证域名所有权,也可以用配置文件指定 Nginx
的 WebRoot
目录来验证( 需要在 Nginx
配置相应路由 .well-known/
).
但是在开始使用 CloudFlare 的服务后,我发现 certbot
使用 DNS-01
验证方式比较麻烦懒的看官方的 Authenticator. 然后我就换成 acme.sh
了.
配置
自动安装 ( 喜欢手动安装看 这里 )
1 | wget -O - https://get.acme.sh | sh |
运行这个脚本会干以下事情:
将
acme.sh
安装到你的用户目录下:~/.acme.sh/acme.sh
创建 alias :
. "/root/.acme.sh/acme.sh.env"
创建定时任务 :
1 | root@yooooex:~# crontab -l |
手动更新
1 | acme.sh --upgrade |
自动更新
1 | acme.sh --upgrade --auto-upgrade |
关闭自动更新
1 | acme.sh --upgrade --auto-upgrade 0 |
使用
WebRoot
和 Standalone
验证
WebRoot
和 Standalone
验证方式就不多说了,和 certbot
大同小异,看文档就好( English | 中文 )
DNS-01
验证
使用 –dns 选项来创建要验证域名的 TXT
记录
1 | acme.sh --issue -d example.com --dns |
1 | [Fri Dec 1 15:17:45 +06 2017] Creating domain key |
添加 TXT
记录
将 Domain
和 TXT value
记录下来,在域名管理商处添加对应的 TXT
记录,并等待其生效.
查询域名
TXT
记录
1 | nslookup -type=txt _acme-challenge.example.com |
当 TXT
记录生效后,便可生成证书.
1 | acme.sh --renew -d example.com |
使用第三方 API 验证
因为我用的是 CloudFlare
,以下操作都是在此基础上进行的,不过和其他 API 也只是参数不同而已. 详看 这里
先去 CloudFlare 拿到 API key ( Overview -> Domain Summary -> Global API Key )
1 | export CF_Key="your key" |
设置完毕后便可以生成证书了.
1 | acme.sh --issue --dns dns_cf -d example.com -d www.example.com |
* 输入的参数会保存到
~/.acme.sh/account.conf
中,以后会自动调用.
导出证书
使用 --installcert
命令来导出证书
1 | acme.sh --installcert -d example.com \ |
- -d: 要导出的域名
- –key-file: 导出私钥的位置
- –fullchain-file: 导出证书的位置
- –reloadcmd: 重载命令,这里用的是
Nginx
,具体的命令要看你用什么了
Wildcard - 通配符证书
2018-3-14 更新:
Let’s Encrypt 已在昨天上线 Wildcard 证书(目前只支持 DNS-01
验证方式),步骤其实和普通的域名差不多,只需增加通配符就可以了.
1 | acme.sh --issue --dns dns_cf -d example.com -d *.example.com |