宝塔面板6.X在Let’s Encrypt证书方面终于支持了DNS申请证书了,我们都知道宝塔面板以前只支持用文件验证的方式来申请证书,所以在自动续期方面不是太友好。到期了需要手动申请!
Let’s Encrypt唯一的缺点是证书只有90天有效期,所以实现自动续期是很多站长希望的。这个时候我们就需要用通过acme申请证书了,宝塔面板Linux平台已经跟新到了6.8.8版本了,但对于Let’s Encrypt泛域名证书的支持貌似还没有完美解决!
对于单域名证书的自动续期,宝塔面板在6.8.8已经解决了,我们可以通过DNS验证来解决。宝塔面板也是利用acme.sh来一键申请和安装letsencrypt免费SSL证书,所以宝塔面板也是安装好了acme,所以如何安装大鸟这类就略过不提了。
第一:验证方式
在 网站管理→设置→ssl 里面,我们可以看到SSL这个功能,我们打开之后可以看到宝塔面板集成了dns验证的方式,所以我们只要用dns验证就可以解决证书自动续期的问题。如图:
在DNS验证中,宝塔提供了3个自动化DNS-API,如图:
Dnspod、阿里云DNS、CloudXns这三个可以自动验证dns,如果不是这三个我们可以用手动解析。
第二:手动解析
大鸟这里用Cloudflare dns来测试。我们选择手动解析。如图:
我们需要到域名出做一个Txt解析。大鸟用Cloudflare dns如下:
Cloudflare dns解析很快,几乎是秒生效。我们可以立即验证。
第三:内置的DNS接口
如果我们用内置的dnspod,那么就轻松点,只需要选择然后然后验证就可以了。
使用【DnsPod/阿里云DNS】接口前您需要先在弹出的窗口中设置对应接口的API,我们需要到dnspod→用户中心→安全设置 里面设置一个API Token,如图:
输入API Token和ID之后就可以验证了申请Let’s Encrypt证书了。验证时有点慢,需要等待下。
第四:申请不成功
我们有时候回申请不成功,比如大鸟一开用的是dns.com家的dns来申请,但是总是不成功。如图:
不知道是什么原因,有知道的同学可以告诉大鸟。
第五:检查证书是否自动续期
我们可以用手动解析或者自动化DNS-API来完成证书的申请,由此实现了Let’s Encrypt泛域名证书和自动续期。如果我们需要检查是否自动续期成功,可以在宝塔面板SSH终端中执行crontab -l
命令查看,如下图:
如果在配置Let’s Encrypt证书后,使用crontab -l查看定时任务,没有发现有关ssl证书续期的脚本,我们可以在面板首页点击修复面板然后再执行这条命令,如下:
echo '9 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null' >> /var/spool/cron/root
第六:总结
宝塔面板安装了acme所以我们实现自动续期还是很容易的。所以我们正常的配置是可以实现自动续期的,但是,可能会有些灵异情况,大鸟就是这样设置了,因为面板也就是刚刚推出了这个功能,所以到底能否实现自动续期还未可知。
不过大鸟lnmp环境安装了acme是可以实现证书的自动续期的,宝塔面板估计是没问题。如果需要证书自动续期的朋友,可以试试宝塔面板给出的通过DNS-API这样的方式来实现证书的自动续期。
dnspod (大陆版):服务商简称dp,所需的API参数:
export DP_Id=”123456″
export DP_Key=”123456”
更多DNS支持信息请查看:https://github.com/Neilpang/acme.sh/tree/master/dnsapi
1F
请问大鸟,有空看看宝塔6.8.8的新增网站申请ssl是不是有点更改了?
我发现用宝塔给新版本以后的let’s encrypt 路径放在伺服器根目录的/.acme.sh了。
以前好像是放在/www/server/panel/vhost/cert 里面的。
这个更改导致cronjob里面没有替新网站续约。
cronjob 默认的是 “/root/.acme.sh”/acme.sh –cron –home “/root/.acme.sh”
如果我手动跑这个script会发现新网站都没有包含在内。
我手动跑 “/root/.acme.sh”/acme.sh –cron –home “/.acme.sh” 才会出现我新网站网址在里面。。。
不确定是我的宝塔问题还是6.8.8问题呢?希望有人注意。
我来自马来西亚。因为无法注册宝塔账号(没有中国手机号验证),所以没有办法去官方论坛发帖子。。
B1
@ Jenn 我仔细看了宝塔面板6.8.8确实如你说的,宝塔官方更改了路径。证书路径是这样的;/etc/letsencrypt/live/www.daniao.org/fullchain.pem;这个我们可以在网站配置文件里可以看到。如果你喜欢以前的方式,我们需要修改证书路径改为以前的方式如:ssl_certificate /www/server/panel/vhost/cert/www.daniao.org/fullchain.cer;然后可以再用acme申请一次。
可以在宝塔面板SSH终端中执行crontab -l命令查看。
如果没有任何内容,也可以手动添加。宝塔面板——计划任务——Shell脚本
大鸟觉得就是路径问题要解决应该就可以了。
B2
@ 大鸟 明白大鸟的解说。
如果我们保持宝塔设定不变的话,nginx证书配置是:
ssl_certificate /etc/letsencrypt/live/www.daniao.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.daniao.org/privkey.pem;
如果我们去看看 /etc/letsencrypt/live/www.daniao.org/fullchain.pem 的话,会发现其实这个只是一个symbolic link (符号链接)。
6.8.8的我发现它就是指向 /.acme.sh/www.daniao.org/fullchain.cer
旧版本是指向 /www/server/panel/vhost/cert/www.daniao.org/fullchain.cer
可是即使我们在网站配置里面手动修改,网站确实是ssl生效,可是因为cron job续约根本没有跑 /.acme.sh/ 这个文件夹,所以任何新网站续约脚本会被忽略掉,如果宝塔没有修复这个问题,3个月后可能网站ssl就会逾期。
因此,我暂时目前觉得最简单方式是在宝塔创建一个计划来跑/.acme.sh 文件夹的续约。
下面cronjob例子:
目前6.8.8版本,如果新添加网站,手动执行cronjob script结果会这样:(完全没有一个站点在跑续约)
[root@DTMC001 ~]# “/root/.acme.sh”/acme.sh –cron –home “/root/.acme.sh”
[Mon Feb 11 16:53:35 CST 2019] ===Starting cron===
[Mon Feb 11 16:53:35 CST 2019] ===End cron===
如果我手动跑这个就会有一些结果:
[root@DTMC001 ~]# “/root/.acme.sh”/acme.sh –cron –home “/.acme.sh”
[Mon Feb 11 16:55:06 CST 2019] ===Starting cron===
[Mon Feb 11 16:55:06 CST 2019] Renew: ‘xxx.com’
[Mon Feb 11 16:55:06 CST 2019] Skip, Next renewal time is: Fri Apr 12 07:13:54 UTC 2019
[Mon Feb 11 16:55:06 CST 2019] Add ‘–force’ to force to renew.
[Mon Feb 11 16:55:06 CST 2019] Skipped xxx.com
[Mon Feb 11 16:55:06 CST 2019] ===End cron===
希望我这个做法可以暂时解决这个问题吧。
2F
我测试了下,确实是你说的这个问题,我自己的也没有跑续约,用你的方法测试下,确实跑到了结果,这个应该是官方自己都没注意的事情,我把这个问题反馈给官方看看!,不过宝塔好用是好用,现在就是小问题一大堆。也欢迎Jenn 常来这里交流宝塔面板的使用心得。
B1
@ 大鸟 没错,宝塔真的很好用。
而且还有免费版+一堆实用工具都免费,这才是真的佛心啊。
不知道宝塔有没有github之类,如果大鸟有的话也来分享下。
行!我会常上来交流交流。
可以学习之余又可以帮助同伴。
B2
@ Jenn 呵呵,我自己也非常喜欢用宝塔面板,那就欢迎常来交流喽!