首页 > 学习收获 > wordpress > 再次启用SSL
2021
11-11

再次启用SSL

看着浏览器网址前面有个小锁,还是让人安心许多啊。

之前主机上装了宝塔,于是开启过SSL。但是宝塔的架构似乎是基于Python,而且作为廉价VPS用户。多余的宝塔面板带来的性能损失某些时候是不可忍受的——每天总有一点时间网站有问题,监控宝每天都要发几条警报。所以换到阿里云的轻量服务器的同时,换回了标准LNMP。于是SSL也就随之关闭,继续裸奔。

这几天搞RSA,觉得SSL还是有必要的,于是前天写完文章就开始搞SSL。WP提供了“Really Simple SSL”插件,号称可以一键开启SSL。然而插件运行过程中的逻辑需要访问Web根目录的上一级目录,感觉在大部分VPS上这个都是不允许的越权。所以无论我怎么手动建立目录,RSSSL都没办法完成建立目录那一步。

回到LNMP官网,发现LNMP里面已经带了SSL脚本,试了一下发现也有些坑。鉴于LNMP官网的信息稍有些滞后,我这里整理下我目前遇到的坑。以下信息基于LNMP 1.8,在2021年双十一有效——限定时间是因为有些BUG是跟时间相关的。开源软件的老问题:版本兼容性似乎并不是某些开发者所在乎的事情。

LNMP的SSL安装从1.5以后基本没什么变化,基本教程可以参考LNMP官网的这篇文章。但是有一些细节需要补充:

首先,lnmp dnsssl xx 这条指令是新建网站且添加SSL,现有网站添加SSL需要使用lnmp ssl add指令。这个在每个版本的发布页里面有写:

LNMP一键安装包 V1.8 正式版

已存在虚拟主机添加SSL:lnmp ssl add
通过DNS API方式生成证书并创建虚拟主机:lnmp dns {cx|dp|ali|…}
只通过DNS API方式生成SSL证书:lnmp onlyssl {cx|dp|ali|…}

LNMP的SSL脚本基于ACME.sh脚本实现,这是一个国人写的可以从 Letsencrypt生成免费的证书的脚本。这个脚本在执行时,如果是基于域名认证的,需要提供域名的API key和token,也就是教程里写到的需要做两个export。此外在近期ACME.sh似乎做了升级,默认的SSL证书生成提供方从 Letsencrypt切换到了ZeroSSL。这就造成了第一个问题:ZeroSSL需要使用邮箱注册一个账号。但LNMP里面带的ACME.sh并没有设置账号,导致申请时会提示如下信息:

Using CA: https://acme.zerossl.com/v2/DV90
No EAB credentials found for ZeroSSL, let's get one
acme.sh is using ZeroSSL as default CA now.
Please update your account with an email address first.

这个解决方案很简单,LNMP将acme.sh安装在/usr/local/acme.sh,只要在这个目录下的account.conf内添加一行:

ACCOUNT_EMAIL='xxx@xxx.com'

随后需要注意的是,在LNMP的SSL脚本执行时,输入域名那里有些让人迷惑。如果你想为自己的网站申请SSL,注意如下的坑:

  • 在ZeroSSL上支持泛域名解析,但不支持www子域名直接申请。因此直接申请为*.dragongod.net建立SSL证书就可以;
  • 由于添加的另一个域名不能与主域名有交叉。所以申请为dragongod.net和*.dragongod.net同时建立SSL的话会报错;
  • 只为dragongod.net申请SSL证书的话,可以申请通过,但浏览器打开时会有警告,因为证书是为dragongod.net生成的,但打开的网站是www.dragongod.net。所以会有不符合的警告;

如果还是希望用Letsencrypt,那么可以执行一次:

acme.sh --set-default-ca --server letsencrypt

这将会修改account.conf,将默认SSL服务提供方修改为 Letsencrypt。使用 Letsencrypt时需要注意的是它似乎不支持泛域名解析,所以直接为www子域名申请即可。

LNMP内开启SSL之后,稍微等一会儿,再到Wordpress后台去看Really Simple SSL,就会提示SSL已开启,还有些其他的警告或者设置需要完成,按照提示进行优化和设置,可以避免一些常见的SSL开启后的问题,确保正常开启SSL。

另外,在使用acme.sh时,如果因为(手贱)测试生成了多个证书,记得在弄完以后bash里看一下:

acme.sh --list

不需要的证书可以删除,不占用公共资源也是一种美德。

acme.sh --remove -d example.com

 

最后编辑:
作者:龙天
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。