现在网站基本都已经使用HTTPS了,如果想要升级到HTTPS,第一步先得申请下发个安全证书(浏览器信任的证书)。现在很多域名提供商也都提供免费证书的申请。但是一般都是一年有效期(付费证书也有有效期),到期前需要手动更新,否则网站就会不能访问。如果想使用免费且会自动更新续签的SSL证书,可以使用let’s encrypt + acme的组合。
一、ACME安装
curl https://get.acme.sh | sh
安装程序会自动做以下操作:
- 自动把 acme.sh 安装到你的 home 的
.acme.sh
目录下,即~/.acme.sh/
- 自动创建一个 bash 的 alias, 方便你的使用:
alias acme.sh=~/.acme.sh/acme.sh
- 自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书
二、更改默认证书
acme.sh --set-default-ca --server letsencrypt
这里建议更改,因为 acme被ZeroSSL收购,其默认的证书方式为ZeroSSL,生成zerossl需要加邮箱,比较麻烦。
三、生成SSL证书
这里主要使用acme.sh --issue
命令来生成证书,生成证书的同时会进行域名的所有权的验证。域名所有权一般有两种验证方式,分别是http网站和dns解析。这里介绍http验证,最简单方便。如果需要dns解析验证,可以参考这篇文章:acme免费证书申请
这里需要注意,如果需要生成泛域名(*.a.com
)的证书,我们不能使用HTTP认证域名,必须改用DNS认证的方式。
./acme.sh --issue -d blog.nbqykj.cn --webroot /home/wwwroot/blog.nbqykj.cn
等待证书签发
四、安装证书
默认生成的证书都放在安装目录下: ~/.acme.sh/
,但是不要在web服务器中直接引用目录下的证书文件,也不要手动来拷贝证书文件到具体的web服务器中,手动拷贝会导致之后更新证书流程不能完全自动。
正确方式是使用acme.sh的安装证书命令,acme.sh自动拷贝证书文件到具体目录中,拷贝命令会被记录下来,之后自动更新证书流程也会执行此拷贝步骤,从而实现更新证书流程的完全自动化。
acme.sh --install-cert -d blog.nbqykj.cn \
--key-file /etc/nginx/ssl/blog.nbqykj.cn/key.pem \
--fullchain-file /etc/nginx/ssl/blog.nbqykj.cn/cert.pem \
--reloadcmd "service nginx force-reload"
五、自动更新
目前证书在 60 天以后会自动更新,你无需任何操作,因为在acme.sh安装时,已经把相关的自动更新程序写入到crontab中,最后可以通过运行crontab -l确认是否已经安装。