certbot是什么

我们申请和使用Let's Encrypt的免费HTTPS证书, 就需要一个证书申请和管理的工具, 然后certbot是官方推荐的申请工具, 我们使用这个工具申请和管理我们的证书

certbot支持大部分的linux发行版, 使用简单, 我们直接下载和安装他们:

我这里的系统是ubuntu, 如果是centos或者其他发行版安装方式应该都是差不多的, 我使用官方包直接快速安装

关于HTTPS是什么可以看这里, Let's Encrypt是什么看这里.

sudo apt update && sudo apt install certbot

安装成功之后需要使用sudo命令运行, 我们运行看看:

sudo certbot -h

输入密码之后, 可以看到说明

certbot

获取证书

安装好管理工具之后, 我们需要申请证书下来, 这里我的web服务器是NGINX, 并且我没有网站的静态目录, 所以我使用这个命令申请:

sudo certbot certonly --standalone -d example.com -d www.example.com -d m.example.com

如果你的网站有静态目录的话, 可以把--standalone改成--webroot并且加上-w参数申请, 类似这样:

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

在你使用--standalone申请证书的时候需要关闭nginx, 因为certbot会启用443端口校验你的域名信息, 如果nginx没有关闭, 会导致端口占用, 所以我们关闭nginx, 我这里是使用ubuntu, 所以使用这个命令关闭nginx:

sudo services nginx stop

配置证书

申请证书完成之后证书会存在在/etc/letsencrypt/live/目录, 我们查看一下没有问题后打开nginx的配置文件修改证书载入路径:

cd /etc/nginx/site-enabled/

编辑配置文件

sudo vim example.com.conf

使用vim编辑:

server {
        server_name example.com www.example.com;
        listen 443;
        ssl on;
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

        location / {
           proxy_pass http://127.0.0.1:3999;
           proxy_http_version 1.1;
           proxy_set_header X_FORWARDED_PROTO https;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header Host $host;
        }
    }

保存退出之后, 使用nginx的test命令测试:

sudo nginx -t

没有问题的话, reload一下

sudo service nginx reload

启动nginx

sudo service nginx start

启动成功之后可以输入网址访问一下, 证书启用是否成功: https://example.com如果显示证书正常表示成功

更新证书

因为 Let's Encrypt证书的有效期只有90天, 到期的时候我们需要刷新证书的有效期, 才可以继续使用, 刷新证书有效期, 因为我们使用的是--standalone模式安装nginx的证书, 所以刷新证书的时候还是需要关闭nginx, 使用这个命令关闭nginx:

sudo service nginx stop

然后运行这个命令刷新:

certbot renew --dry-run

或者我们使用系统的定时器, 再时间快要结束的时候, 刷新就行, Let's Encrypt证书官方说证书截止时间要小于一个月的时候才可以刷新, 我们可以配置两个多月的时候刷新时间就可以啦, 这里我们编写一个cron计划, 每两个月的凌晨 2:15 执行 更新操作

15 2 * */2 * root certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"

然后这个命令执行需要root用户的权限, 我们登录root用户:

sudo su

接着创建一个file, 就叫cronfile好了, 完了之后写入这个定时计划:

touch cronfile
echo '15 2 * */2 * root certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"' > ./cronfile

完了之后运行计划:

crontab -u root ./cronfile

执行成功后使用-l查看计划:

crontab -l

结束

到这里我们的证书申请就结束啦, 👏

题图