乐趣区

使用acme.sh撸一个免费且自动更新的HTTPS证书

前言
一直想撸一下 https,最近刚好有点空,就实现了一下。之前看过一篇教你快速撸一个免费 HTTPS 证书的文章,通过 Certbot 来管理 Let’s Encrypt 的证书,使用前需要安装一堆库,觉得不太友好。所谓条条大路通罗马,肯定还有其他方法可以做这个事情。
经过一番研究,发现了 acme.sh 这个库,这个是用 Shell 脚本编写的,不需要安装其他东西,比较纯净,觉得比较适合自己,记录一下过程。
准备工作

一个已解析好的域名(可以用 http 来访问)。
开启服务器的 443 端口防火墙。

步骤
一、安装 acme.sh
curl https://get.acme.sh | sh
这个命令后会将 acme.sh 安装到~/.acme.sh/ 目录下重新载入~/.bashrc
source ~/.bashrc
二、生成证书
acme.sh –issue -d www.your-domin.com –webroot /srv/your-domin.com/
这个命令的意思是用 http 方式将 www.your-domin.com 生成一个证书,/srv/your-domin.com/ 是你的网站根目录。(这个过程中 acme.sh 会全自动的生成验证文件, 并放到网站的根目录, 然后自动完成验证. 最后又自动删除验证文件.)
三、安装或 copy 证书到 nginx 目录
默认生成的证书都放在安装目录下: ~/.acme.sh/,这个目录一般来说不能让 nginx 或 Apache 直接使用。所以我们需要将证书放到一个指定的目录,习惯是放在 /etc/nginx/ssl/ 目录下。acme 提供了 –installcert 来安装证书,只需指定目标位置, 然后证书文件会被 copy 到相应的位置。先确保存在 /etc/nginx/ssl/ 目录
mkdir /etc/nginx/ssl
copy 证书并指定 nginx reload 命令
acme.sh –installcert -d www.your-domin.com \
–key-file /etc/nginx/ssl/www.your-domin.com.key \
–fullchain-file /etc/nginx/ssl/fullchain.cer \
–reloadcmd “service nginx force-reload”
service nginx force-reload 是为了在让 acme 自动更新时候能够重启 nginx 使得证书生效。执行完命令可以在 /etc/nginx/ssl/ 看到多了 www.your-domin.com.key 和 www.your-domin.com.cer 的文件。
四、生成 dhparam.pem 文件
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
这一步不是必须,但最好加上,后面配置好后会通过 ssllabs.com 来验证一下,如果这一步 ssl_dhparam 未配置,将导致 ssllabs.com 的评分降到 B。A+ 是最好。
五、配置 nginx
证书已安装完毕,接下来就是让 nginx 来使用这个证书了。由于我这个服务器有几个站点,而目前只是一个站点配置了证书,因此只修改当前站点的 conf 即可
server {
listen 80;
server_name www.your-domin.com;
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
ssl_certificate /etc/nginx/ssl/www.your-domin.com.cer;
ssl_certificate_key /etc/nginx/ssl/www.your-domin.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;

}
ssl_prefer_server_ciphers on; 这个配置能提高证书的评分。ssl_dhparam /etc/nginx/ssl/dhparam.pem; 能提高证书评分,这个文件是在第四步时生成的,若没有做则不需要写这句。nginx - t 验证一下 nginx 配置是否正确,然后 systemctl restart nginx 重启一下 nginx,就可以用 https://www.your-domin.com 测 …。
六、证书更新
Let’s Encrypt 的证书有效期是 90 天的,需要定期重新申请,不过 acme 在安装的时候就已经设置了自动更新,所以这一步不用关心,很省心。这里了解一下 acme.sh 的自动更新:安装 acme 时会自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书. 查看任务
# crontab -l
47 0 * * * “/root/.acme.sh”/acme.sh –cron –home “/root/.acme.sh” > /dev/null
手动 renew 一下证书可以通过这个命令
acme.sh –cron -f
七、设置软件自动更新
目前由于 acme 协议和 letsencrypt CA 都在频繁的更新, 因此 acme.sh 也经常更新以保持同步. 所以为了省心省力,最好还是设置一下软件的自动更新,执行下面的命令就可以了。
acme.sh –upgrade –auto-upgrade
其他
在这个网站可以验证一下你的证书级别,根据我上面的配置可以评级为 A。https://www.ssllabs.com/sslte…
参考文章

acme.sh 说明
使用 acme.sh 给 Nginx 安装 Let’s Encrypt 提供的免费 SSL 证书
让你的网站免费开启 Https 访问,绿色健康小清新

退出移动版