简单使用Certbot申请和使用Let's Encrypt的SSL证书
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
输入密码之后, 可以看到说明
获取证书
安装好管理工具之后, 我们需要申请证书下来, 这里我的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
结束
到这里我们的证书申请就结束啦, 👏