深色模式
使用certbot手动申请ssl证书
为什么要手动申请证书
certbot
自动申请证书很方便,但是有一些局限,比如,为CNAME
域名申请证书时,如果CNAME
指向别人的服务器(很常见),则不能自动申请了。
手动申请步骤:
- 输入
certbot
命令 - 按提示输入信息
- 手动添加
DNS
记录 - 验证
DNS
记录 - 验证通过,获取证书
步骤详细说明
这里以域名img.example.com
为例,申请ssl证书。
输入certbot命令
(没有安装certbot
要先安装,可使用brew
安装。)
sh
sudo certbot certonly --manual --preferred-challenges dns -d img.example.com
按提示输入信息
会要求输入一个邮箱,要求同意一些协议。
手动添加DNS记录
按照提示,在域名解析中添加一条TXT
记录,记录名、记录值均由提示给出:
Please deploy a DNS TXT record under the name:
_acme-challenge.img.example.com.
with the following value:
aaaaabbbbbccccc_dddddeeeeefffffggggghhhhhii
登录XX云,为img.example.com
添加一条解析记录,记录名是_acme-challenge.img
,类型是TXT
,值是aaaaabbbbbccccc_dddddeeeeefffffggggghhhhhii
。
(记录值是随机的,这里aaaaabbbbbccccc_dddddeeeeefffffggggghhhhhii
只是举例。)
注意:添加成功以后,要自己先验证DNS
,验证OK,输入Enter
键,就完成了。
验证DNS记录
使用dig命令:
sh
dig TXT _acme-challenge.img.example.com
如果解析成功,可以看到上一步添加的记录值:
;; ANSWER SECTION:
_acme-challenge.img.example.com. 600 IN TXT "aaaaabbbbbccccc_dddddeeeeefffffggggghhhhhii"
验证通过,获取证书
输入Enter,即可得到证书文件,证书文件的路径,可以在控制台输出中看到,一般是在/etc/letsencrypt/live
目录下面。
此目录的权限是700
,即drwx------
,无法直接访问,可通过sudo
把证书复制到普通目录中,比如~/Downloads
:
sh
mkdir -p ~/Downloads/img.example.com && sudo cp -r /etc/letsencrypt/live/img.example.com/ ~/Downloads/img.example.com/
文件共5个:
README
: 说明文档,解释了这些证书文件的用途和如何使用下面4个文件。cert.pem
: 证书chain.pem
: 证书链fullchain.pem
: 完整的证书链privkey.pem
: 私钥
一般只会用到cert.pem
和privkey.pem
这2个文件。
复制出来后,私钥文件privkey.pem
的权限可能是-rw-------
,不可读,需要修改权限:
sh
sudo chmod a+r ~/Downloads/img.example.com/privkey.pem
总结
假设域名是img.example.com
,总结一下需要操作的内容:
开始申请:
sudo certbot certonly --manual --preferred-challenges dns -d img.example.com
手动添加DNS解析:
_acme-challenge.img TXT ${记录值}
验证DNS:
dig TXT _acme-challenge.img.example.com
复制证书:
mkdir -p ~/Downloads/img.example.com && sudo cp -r /etc/letsencrypt/live/img.example.com/ ~/Downloads/img.example.com/
修改私钥权限
sudo chmod a+r ~/Downloads/img.example.com/privkey.pem