部署 Let's Encrypt 免费证书
1. 关于Let’s Encrypt
Let’s Encrypt 是一家SSL证书颁发机构。它的服务商提供了免费SSL证书。
2. 关于Certbot
Certbot 是一款免费的开源软件工具,可在手动管理的网站上自动使用Let's Encrypt证书来启用 HTTPS。
3. 使用Certbot为nginx部署免费SSL证书
3.1. 安装软件
nginx
certbot
python3-certbot-nginx
3.2. 配置nginx
假设域名为:example.com
server {
listen 80;
listen [::]:80;
server_name example.com;
root /var/www/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
重启nginx
sudo nginx -s reload
配置为http服务,并确保外网通过域名可以访问到。
3.3. 运行certbot部署证书
sudo certbot --nginx -d example.com
运行过程中需要填写一个邮箱,其它都输入Y即可。它将自动连接Let's Encrypt申请免费证书,并自动修改nginx的配置文件进行HTTPS服务的部署。
执行成功后,nginx的配置文件内容变为:
server {
server_name example.com;
root /var/www/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = example.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name example.com;
return 404; # managed by Certbot
}
3.4. 设置crontab,定时自动更新证书
免费证书有效期比较短,多数为90天,手动维护比较麻烦,所以设置一个定时任务,调用certbot自动更新证书。
如果没有crontab命令,需要先安装cron软件
sudo apt install cron
设置定时任务
sudo crontab -e
编辑保存定时任务规则:
0 0 1 * * /usr/bin/certbot renew --quiet
# 0 0 1 * * 意思是每个月的1日0点0分执行
# --quiet 参数让certbot不输出日志
# certbot会更新30天内到期的证书
License:
CC BY 4.0