linux

使用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

留言

您的电子邮箱地址不会被公开。 必填项已用 * 标注