明道学苑

学而不思则罔,思而不学则殆

0%

使用Let's Encrypt Certbot获取更新Nginx SSL证书

本文说明如何使用Certbot从Let’s Encrypt获取和更新证书,并配置启用Nginx的SSL。获取SSL证书时没有使用专门Nginx on Ubuntu的方法,而是使用更通用的基于webroot的验证方法。获取成功后,增加post-script脚本以便在证书自动更新后自动重启Nginx服务。

安装Certbot

服务器使用的是Ubuntu,根据Certbot官方文档,先安装Snapd(其他操作系统可参考这里)。

sudo apt update
sudo apt install snapd

然后使用Snapd安装Certbot。

sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

接下来就可以使用Certbot获取,自动更新SSL证书了。

获取新证书

使用如下指令获取新证书,根据实际情况将example.com更换成实际域名:

sudo certbot certonly --webroot -w /var/www/html/ -d example.com

根据提示输入邮箱,确认协议。

使用–webroot 模式时要确保example.com已经可以通过互联网访问。它会在 /var/www/html/中创建.well-know文件夹,需要确保可以通过站点example.com访问到.well-know文件夹下创建的文件。

查看证书

同一台服务器可获取多个证书,使用如下指令查看所有证书:

sudo certbot certificates

可以看到实际获取到的最新的物理路径位置是/etc/letsencrypt/live/example.com/

配置Nginx支持SSL

server{
listen 443;
server_name example.com www.example.com;
ssl on;
ssl_certificate /ssl/fullchain.pem;
ssl_certificate_key /ssl/privkey.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
root /var/opt/www/;
index index.html;
}
}

设置重定向(百度收录需要验证),所有http请求永久重定向到https。

rewrite ^(.*) https://example.com$1 permanent;

测试自动更新证书

sudo certbot renew --dry-run

看到**Congratulations, all renewals succeeded. ……**的字样说明自动更新成功。

这个命令会产生一个定时任务,用来自动更新证书。可能位于下面的位置:

/etc/crontab/
/etc/cron.*/*
systemctl list-timers

证书自动更新后重启Nginx服务

/etc/letsencrypt/renewal-hooks/post目录下,创建restart_nginx.sh文件,在有证书更新时重启服务。文件内容如下:

systemctl restart nginx

再次用sudo certbot renew --dry-run测试验证一下,可以看到nginx被重启的提示消息。