使用certbot申请Let’s Encrypt的证书
使用certbot安装免费https证书使Nginx支持Https请求
环境:centos7/ubuntu20.04
安装Certbot
centos7
yum -y install epel-release
yum install certbot python2-certbot-nginx -y
ubuntu20.04
sudo apt update
sudo apt install certbot python3-certbot-nginx
Certbot注册证书有两种工作方式:(个人推荐手动模式)
- 自动模式:在申请 SSL 证书后会自动修改配置文件以启用 HTTPS
- 手动模式:只生成 SSL 证书,需要自行修改 Nginx 配置
Certbot 自动模式
一句命令搞定
sudo certbot --nginx
申请证书过程有几个交互问题,分别如下。
输入电子邮箱,用于接收通知邮件;
查看服务条款,输入 A 同意后注册;
列出所有在 Nginx 配置里找到的域名,用列表数字选择(多个以空格隔开),不输入则选择全部;
是否将 HTTP 访问重定向到 HTTPS,输入数字选择,1 表示不设置,2 表示设置;
申请完后提示证书文件路径。这时已自动启用 HTTPS,访问网站试试;
Certbot 手动模式
运行下面命令申请 SSL 证书
sudo certbot --nginx certonly
申请过程中的选项问题和上面自动模式一样,只是少了更新 Nginx 配置步骤。
在申请生成 SSL 证书后,手动编辑 Nginx 站点配置文件加入设置。
以下是一个示例(申请了www.example.com 域名证书,并设置 HTTP 访问重定向。下面除了设置证书文件路径,SSL 相关参数直接引用 Certbot 提供的配置文件。
server {
listen 80;
listen [::]:80;
server_name www.example.com;
return 301 https://www.example.com$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name www.example.com;
root /var/www/www.example.com;
index index.html index.htm;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
完成上面设置后就可以用 HTTPS 访问了,默认设置通常可以得到 A 级评分。如果要进一步优化 SSL 配置,例如修改缓存时间,启用 HSTS 等。Mozilla 有一个在线配置生成工具可以用来参考,该工具要填写的软件版本号用下面命令查看:nginx -v查看 Nginx 版本,openssl version查看 OpenSSL 版本。
Certbot 自动续期
Let’s Encrypt 免费证书只有 90 天期限,需要设置自动续期。先用下面命令测试续期功能是否正常。
sudo certbot renew --dry-run
计划任务配置自动更新证书
crontab -e
0 0 */5 * * /usr/bin/certbot renew &>/var/log/certbot-renew.log