Lets Encrypt是一个免费的证书授权机构(CA),其通过ACME 协议接口自动签发数字证书,来让你省去证书过期的烦恼。
ACME客户端有很多,Lets Encrypt 官网推荐Certbot ,下面是具体获取免费证书的流程:
一、安装 Certbot 客户端
| 
					 1  | 
						yum install certbot  | 
					
二、生成证书
| 
					 1  | 
						certbot certonly --webroot -w /your/site/root -d yoursite.com -d  | 
					
上述命令会为 yoursite.com 和 www.yoursite.com 这两个域名生成证书,使用 –weroot 模式会在 /your/site/root 中创建 .well-known 文件夹,这个文件夹里面包含了一些验证文件,certbot 会通过访问 yoursite.com/.well-known/acme-challenge 来验证你的域名是否绑定的这个服务器。
生成的证书会被放置在 /etc/letsencrypt/live/yoursite.com/ 目录下。我们要用到的有两个 fullchain.pem 和 privkey.pem
三、配置证书
在 nginx 配置对证书:
| 
					 1 2 3 4 5 6  | 
						server {   server_name yoursite.com www.yoursite.com;   listen 443;   ssl_certificate /etc/letsencrypt/live/yoursite.com/fullchain.pem;   ssl_certificate_key /etc/letsencrypt/live/yoursite.com/privkey.pem; }  | 
					
四、自动更新 SSL 证书
Let’s Encrypt 提供的证书只有90天的有效期,我们必须在证书到期之前,重新获取这些证书,certbot 给我们提供了一个很方便的命令,那就是 certbot renew。 通过这个命令,他会自动检查系统内的证书,并且自动更新这些证书:
| 
					 1  | 
						certbot renew --dry-run  | 
					
上述命令需要手动在证书到期前执行,来更新证书。为了更方便,我们可以启动一个定时任务,来完成自动更新
CentOS 7 上设置定时任务有多种方式,如:crontab、systemd timer、at等。本文采用crontab。
我们设置每隔两个月执行一次更新命令,并重启 nginx。首先看下 crontab 任务格式:
| 
					 1  | 
						* * * * * command  | 
					
其中,五个星号分别代表分钟、小时、日、月、周,可以使用以下符号:
*: 代表任意值
,:代表多个值
-:代表一个范围
/:代表间隔时间
所以我们的命令如下:
| 
					 1  | 
						0 3 4 */2 * certbot renew --post-hook "nginx -s reload" >> /var/log/certbot-renew.log 2>&1  | 
					
上述命令表示,每隔两个月的4号凌晨3点,重新执行cerbot证书续期命令,执行完后重启nginx,并生成日志;
下面是具体设置定时任务步骤:
1、执行命令 crontab -e
2、输入命令 0 3 4 */2 * certbot renew –post-hook “nginx -s reload” >> /var/log/certbot-renew.log 2>&1
保存并退出。
系统提示:
| 
					 1 2  | 
						no crontab for root - using an empty one crontab: installing new crontab  | 
					
表示定时任务设置成功!
可以通过 crontab -l 来查看定时任务是否设置成功。

