宝塔面板正确部署Let's Encrypt SSL泛域名证书并实现自动续期教程

前言

在上篇文章中, 我们讲述了如何使用acme.sh申请及续签Let's Encrypt的泛域名证书, 但部署教程并没有详细展开. 本文将介绍如何在宝塔面板上正确部署已经申请好了的Let's Encrypt SSL泛域名证书并且实现自动续期.

如果还没有申请SSL证书, 可按照这篇文章申请后再继续往下阅读:

相关说明

虽说宝塔面板已经预安装了acme.sh, 但还是建议按照上述文章重新安装一遍, 避免出现不必要的问题. 本文演示用的宝塔面板是v5.9.1版本, acme.sh工作目录默认为/root/.acme.sh.

首先来说说宝塔面板部署SSL证书时涉及到的两个文件夹

  1. 证书夹
/www/server/panel/vhost/ssl

宝塔一键申请的证书和自己保存的其他证书都会出现在这个文件夹里. 如果是宝塔一键申请的, 还会在证书夹域名文件夹中额外生成一个info.json文件.
i> 该文件包含了对应域名证书的证书品牌、到期时间、申请时间、信任名称和域名信息, 而且只有存在这个文件, 宝塔前端面板证书夹才会显示相应证书.

  1. Nginx 使用的证书夹
/etc/letsencrypt/live

宝塔Nginx配置文件里使用的证书文件夹, 详情如下:

ssl_certificate    /etc/letsencrypt/live/你的域名/fullchain.pem;
ssl_certificate_key    /etc/letsencrypt/live/你的域名/privkey.pem;

宝塔面板里的证书(PEM格式)对应acme.sh生成的fullchain.cer
宝塔面板里的密钥(KEY)对应acme.sh生成的你的域名.key

在上述文章里我们已经通过以下命令将证书和密钥复制到宝塔证书夹, 同时密钥也转换成了对应的privkey.pem

acme.sh --installcert  -d yindan.me -d *.yindan.me   \
        --key-file  /www/server/panel/vhost/ssl/yindan.me/privkey.pem \
        --fullchain-file /www/server/panel/vhost/ssl/yindan.me/fullchain.pem \
        --reloadcmd  "service nginx force-reload"

!> 最后一条命令 service nginx force-reload 会报错, 宝塔面板的 Nginx 貌似不支持 force-reload, 后文将给出解决方案.

部署证书

创建 info.json 文件

需要注意的是, 我们用acme.sh签发的证书是没有这个info.json文件的, 所以即使证书已经存在证书文件夹里, 前端面板也不会显示. 其实只要自行创建一个info.json文件就好啦:

cat > /www/server/panel/vhost/ssl/你的域名/info.json <<EOF
{"issuer": "Let's Encrypt", "notAfter": "2019-09-11", "notBefore": "2019-06-13", "dns": ["*.yindan.me", "yindan.me"], "subject": "yindan.me"}
EOF

建立符号链接

因为一个泛域名证书可以对应多个站点, 不妨将证书夹里的域名文件夹建立一个或多个软链接到Nginx使用的证书夹里对应的域名文件夹.

ln -s /www/server/panel/vhost/ssl/你的域名 /etc/letsencrypt/live/子域名 α
ln -s /www/server/panel/vhost/ssl/你的域名 /etc/letsencrypt/live/子域名 β
# 举个栗子
ln -s /www/server/panel/vhost/ssl/yindan.me /etc/letsencrypt/live/t.yindan.me

ssl证书夹

部署证书

按照宝塔常规设置SSL的方法, 在站点修改左侧栏点击SSL, 选择证书夹, 定位到你的域名证书位置, 再点击右边的部署, 稍等那么几秒, 就会提示部署完成!

自动续期

上文提到, 宝塔面板的Nginx貌似不支持force-reload命令, 这就导致在acme.sh续签证书后, Nginx无法重新读取SSL证书信息, 因此新的证书不会立即生效.

解决方案:
service nginx restart代替service nginx force-reload命令, 并且在acme.sh更新证书后, 借助面板的计划任务运行一次该命令即可实现自动续期.

设置计划任务

宝塔面板-计划任务-Shell脚本: service nginx restart, 如图所示:

计划任务

注意事项

因为info.json文件不会自动更新, 导致证书自动续签后前端证书夹不会更新到期时间等信息, 强迫症的话需要手动修改.


现在打开网站看看吧, 是不是成功配置了小绿锁呢www

另外, 可以通过如下站点检测网站的安全级别:

Last modification:October 10th, 2019 at 12:50 am
如果觉得我的文章对你有用,请随意赞赏

Leave a Comment