Let's Encrypt生成免费证书
要在您的网站上启用HTTPS,您需要从证书颁发机构(Certificate Authority)(CA)获取证书(一种文件类型)。Let’s Encrypt就是一个证书颁发机构。为了从Let’s Encrypt获得您网站域名的证书,您必须证明对该域名的控制权。使用Let’s Encrypt,您可以使用使用ACME协议的软件来执行此操作,该协议通常在您的Web主机上运行。
建议大多数使用shell访问的人使用 Certbot ACME客户端。它可以自动执行证书颁发和安装,而不会停机。
Cerbot安装
在centos7上使用nginx情况下,certbot安装流程如下:
1 | $ yum -y install yum-utils |
1 | $ sudo yum install certbot-nginx |
具体安装流程可见:certbot home 和 certbot installation
Certbot生成证书
1 | $ certbot certonly --nginx --nginx-server-root /path/to/nginx_server_root -d www.example.com -d example.com --email email_address --agree-tos |
详情请见: certbot installation 和 get certbot
生成证书成功后默认证书路径为:
certificate and chain: /etc/letsencrypt/live/example.com/fullchain.pem
key file: /etc/letsencrypt/live/example.com/privkey.pem
证书过期问题
Let’s Encrypt CA发行的是短期证书(90天),所以需要确保3个月内至少更新一次证书。
解决方法如下:
使用crontab创建定时任务,执行下列脚本:
renew.sh:
1 | # !/bin/bash |
certbot更新证书详情请见:certbot renewing certificates
创建定时任务,每月都更新一次证书:
1 | 42 4 1 * * /path/to/renew.sh >> /path/to/renew.log 2>&1 |
Crontab
时间表格式: f1 f2 f3 f4 f5 program
- 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程式。
- 当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程式,其余类推
- 当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其余类推
- 当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其余类推
- 当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,其余类推,使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设定时程表。
- 由于unix版本不一样,所以部分语法有差别,例如在hp unix aix 中设定间隔执行如果采用*/n 方式将出现语法错误,在这类unix中 ,间隔执行只能以列举方式。
Nginx配置https
关键示例配置:
1 | server { |
配置完成后,重启nginx服务:
1 | $ /path/to/nginx -t |
1 | $ /path/to/nginx -s reload |
nginx -t 检查nginx配置文件是否正确。nginx -s reload 平滑重启nginx