使用Let’s Encrypt生成免费SSL证书(By-Ruicky)
前提条件
- nginx
- Centos 7
- 域名:www.example.com(替换成你自己的)
生成证书
1. 配置Nginx,验证证书对应域名的所有权.
为需要配置https的站点添加以下配置,将访问/.well-known的请求指向本地目录。Let’s Encrypt在生成证书的过程中,会在/var/www/www.xxx.com/.well-known目录生成一个临时文件,并且会访问类似于http://www.xxx.com/.well-known/acme-challenge/HGr8U1IeTW4kY_Z6UIyaakzOkyQgPr_7ArlLgtZE8SX的url,来检查域名配置是否有效。
添加以下配置,并重启Nginx:nginx -s reload,如果reload不生效,可以试试restart。
1 | server { |
2. 安装certbot。推荐使用官方推荐安装方法(centosrhel7-nginx)。
1 | yum -y install yum-utils |
3. 使用certbot命令行生成证书.
- 使用向导生成
certbot certonly
- 使用快捷方式生成
cd /var/www && mkdir www.example.com
certbot certonly --webroot --webroot-path /var/www/www.example.com -d www.example.com --agree-tos --email admin@example.com
生成的证书默认在/etc/letsencrypt/live/www.xxx.com/目录。
4. 配置Nginx使用证书
添加以下配置,并重启Nginx:nginx -s reload,如果reload不生效,可以试试restart。
1 | server { |
PS: 如果想让http强制跳转到http则需要监听80端口的配置如下
1 | server { |
最终,你的nginx的配置文件应该类似下面这种
1 | server { |
5. 检查证书的有效性
打开浏览器,检查证书的有效性。
6. 证书续期
Let’s Encrypt颁发的证书有期是90天,需要在过期前进行续期,好在Let’s Encrypt已经提供了自动续期的脚本。
官网说明,可以一天调用两次,如果检测到证书不需要更新,是什么都不做的,以减少意外造成的故障。
先运行certbot-auto renew –dry-run命令检查证书自动续期是否正常,如果正常,将certbot-auto renew –quiet命令添加到系统的计划任务cron中,就可以实现证书自动续期了。
1 | crontab -e |
输入以下内容:
1 | 01 1 * * * certbot renew --post-hook "systemctl reload nginx" |
表示每天的1点1分自动执行续期脚本。
参考资料
使用Let’s Encrypt生成免费SSL证书
Cron job for let’s encrypt renewal
Let’s Encrypt SSL证书配置