四月份之后各种事情一直忙到毕业,回过头来发现网站的SSL过期了。也就随手记录一下网站更新证书的过程。
ACME[1](Automatic Certificate Management Environment 自动证书管理环境)是由Let’s Encrypt组织开发的、用于自动化获取SSL证书的协议。acme.sh[2]是一个实现了ACME协议的unix shell脚本工具,可以使用acme.sh方便地获取SSL证书。
Let’s Encrypt[3]免费、开放、自动化的公益性证书颁发机构,助力各类网站启用 HTTPS,旨在创建一个更安全,更尊重隐私的 Web 环境。
1 | 使用以下一行命令安装 |
acme.sh默认使用ZeroSSL,这里我们切换用Let’sEncrypt
1 | acme.sh --set-default-ca --server letsencrypt |
使用acme.sh生成证书的方式主要有HTTP和DNS两种。这里使用DNS方式,需要能够登录到拥有域名的控制面板进行手动添加DNS解析记录。
1 | 首先需要提交申请 |
注意这里用通配符表示的泛域名“*.wcguo.com”不包括“wcguo.com”,所以如果要给wcguo.com也用SSL的话必须额外加上[4]。
申请的指令执行成功后,会显示两条需要手动添加到DNS中的TXT记录值。登录到自己域名的控制面板手动添加这两条记录值。
其实DNS方式可以用域名解析商提供的API自动添加TXT记录实现自动申请SSL,但是我买的域名这个提供商好像没有提供API。所以只能手动添加了,每三个月都要弄一次稍微有点麻烦。
手动添加完DNS解析后就可以进行验证然后生成证书了。注意这里命令用到的参数是–renew。
1 | 生成证书 |
生成成功后控制台会显示一大串内容,默认生成的证书文件都放在安装目录下: ~/.acme.sh/
。
不推荐直接用默认目录里的文件,而是复制到其它地方再使用。
或者直接用--install-cert
命令指定证书的目标位置。
1 | 将证书放到指定位置 |
Nginx使用到两个证书文件,key-file和fullchain-file。其中Nginx的配置ssl_certificate
使用 fullchain
的文件作为cert文件。所以可以根据情况得到下面的命令
1 | 将证书放到指定位置 |
得到证书文件后就可以在Nginx配置文件中进行使用了。这里以https访问www.wcguo.com
为例简单展示配置文件片段。
1 | server { |
要配置的主要是下面几个地方
listen 443;
ssl on;
ssl_certificate /usr/local/nginx/ssl/cert.pem;
ssl_certificate_key /usr/local/nginx/ssl/key.pem;
配置完成后记得重启Nginx。
1 | nginx -s reload |
[1]ACME协议:https://www.rfc-editor.org/info/rfc8555
[2]acme.sh仓库地址:https://github.com/acmesh-official/acme.sh
[3]Letsencrypt官网:https://letsencrypt.org/
[4]通过 acme.sh 申请 Zero SSL 免费泛域名证书:https://blog.csdn.net/zhangxin09/article/details/125062975
[5]使用 acme.sh 配置自动续签 SSL 证书:https://u.sb/acme-sh-ssl/
[6]Letsencrypt泛域名SSL证书免费申请:https://cloud.tencent.com/developer/article/2142931
[7]【Linux】使用 acme.sh 实现了 acme 协议生成免费的SSL 证书:https://blog.csdn.net/ihero/article/details/136232342
[8]HTTPS之acme.sh申请证书:https://developer.aliyun.com/article/674835
[9]Debian服务器上使用ACME.SH脚本免费获取SSL泛域名证书并启用HTTPS加密:https://www.bilibili.com/read/cv15876438/