之前写过一篇申请Let’s Encrypt的教程,最近服务器到期,我就将之前的服务器换到了新的服务器上,而且正好碰到有一个站点的域名到期了,于是就按照之前的生成证书的方法折腾,结果没成功,不断报错,因此有了这篇文章,可以看成是对另外一篇文章的补充吧。
之前那篇是通过 yum 的方式安装的,可以参考之前那篇,今天这篇是snap方式安装。
亲测非常有效的 Let’s Encrypt 证书申请、部署安装与自动续期教程
snap 方式安装certbot
优点:官方推荐,兼容性好,不依赖系统。
安装 snap (jumpserver 会报警)
apt-get install snapd
卸载其他形式安装的
sudo apt-get remove certbot
安装 certbot
sudo snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/
certbot --version
查看版本 (出现版本后表示安装成功)
certbot --version
下载安装 letscertbot
这个的主要作用是用于自动化获取、续期、部署ssl证书使用。
cd /opt/scripts
git clone https://github.com/jinhucheung/letscertbot.git
#修改配置文件
cd letscertbot
cp config.json.example config.json
vim config.json
测试是否可以正常的修改阿里云的DNS解析配置
cd /opt/scripts/letscertbot
sudo python ./bin/manual.py --test --domain www.xxzhuti.com --dns aliyun
---------------- 正确的返回----------------- 可以正常生成证书
root@zuiyoujie:/opt/scripts/letscertbot# sudo python ./bin/manual.py --test --domain www.xxzhuti.com --dns aliyun
start to test www.xxzhuti.com in DNS aliyun API
add TXT record(domain=xxzhuti.com, rr=_acme-challenge.letscertbot, value=uJqSmGygc6iH3ApZ) to aliyun DNS
added TXT record
waiting 20 seconds...
remove above TXT record
removed TXT record
tested www.xxzhuti.com in DNS aliyun API
-----------------------------------------------------
------------------ 错误的返回 ----------- AKSK配置的权限有问题无法正确添加解析记录
root@zuiyoujie:/opt/scripts/letscertbot# sudo python ./bin/manual.py --test --domain www.xxzhuti.com --dns aliyun
start to test www.xxzhuti.com in DNS aliyun API
add TXT record(domain=xxzhuti.com, rr=_acme-challenge.letscertbot, value=juXeSRP9mfC14Dop) to aliyun DNS
ERROR:logger:aliyun#__request raise urllib2.HTTPError: HTTP Error 400: Bad Request
HTTP Error 400: Bad Request
--------------------------------------------
执行完命令后,看你是否能正确返回,我猜想你一定会报错,那是因为我们还需要配置阿里云的key和密钥。在上一步 config.json 中,我们需要填写邮箱,阿里云的key和密码,你若是别的云服务器,填写对应的即可,我这里以阿里云为例说明如何获取。
找到你右上角头像管理那的 accessKey管理,点击进去,然后创建子用户,即可生成对应的Key和密钥,给子用户添加 AliyunDNSFullAccess 权限。
这步完成后,再次执行测试命令,若是出现正确信息,即可。
生成证书命令
# 证书生成目录,软链接
ll /etc/letsencrypt/live/
# 证书文件目录
ll /etc/letsencrypt/archive/
python ./bin/obtain.py -d www.xxzhuti.com --cert www.xxzhuti.com
python ./bin/obtain.py -d *.xxzhuti.com --cert all.xxzhuti.com
python ./bin/obtain.py -d *.xxzhuti.com --cert all.xxzhuti.com
python ./bin/obtain.py -d *.xxzhuti.com --cert all.xxzhuti.com --dns aliyun --challenge-alias _acme-challenge.xxzhuti.com
-d 指定申请证书的域名
--cert 指定生成的证书文件的名称
最后按照之前的教程将证书设置为自动更新即可,自动更新脚本下方获取。
特别提醒
ssl-cert-check 证书检查命令可以通过下载,或者 apt-get install ssl-cert-check 安装都可以,检测域名命令
sudo ./ssl-cert-check -c /etc/letsencrypt/live/www.xxzhuti.com/fullchain.pem
ssl-cert-check 命令详解
ssl-cert-check
是一个用于检查 SSL 证书到期时间的命令行工具。以下是使用 ssl-cert-check
的基本用法:
- 1. 安装 ssl-cert-check:首先,确保已在系统上安装了
ssl-cert-check
工具。可以使用类似于下面的命令进行安装(假设您使用的是 Ubuntu/Debian 系统):sudo apt-get install ssl-cert-check
- 2. 运行 ssl-cert-check:安装完成后,您可以通过以下方式来运行
ssl-cert-check
命令:ssl-cert-check [选项] 主机名[:端口]
[选项]
:可以选择性地添加一些选项,如-c
(显示证书详细信息)、-x
(显示过期时间以及剩余天数)等。主机名[:端口]
:指定要检查证书的主机名和可选的端口号。默认情况下,使用的是 HTTPS 的默认端口 443。
下面是一些示例:
- 显示证书的详细信息:
ssl-cert-check -c example.com
- 显示证书的过期时间以及剩余天数:
ssl-cert-check -x example.com
- 检查自定义端口上的证书:
ssl-cert-check example.com:8443