本文用的是Let’s Encrypt数字证书认证机构免费提供的ssl证书。letsencrypt基于ACME协议自助颁发证书的过程由letsencrypt提供一个工具完成,工具名称现在叫做:certbot,在linux下certbot工具安装后也就是certbot命令。
1,.安装certbot用于生成证书
1 2 3 4 5 6
| yum install epel-release
yum makecache
yum install certbot
|
2.使用certbot申请Let’s Encrypt免费的ssl证书
配置Let’s Encrypt有两种模式,standalone和webroot。至于两种模式的区别可自行百度一下。我们这里使用的是webroot模式。
1 2
| certbot certonly --webroot -w /var/www/blog -d blog.ibeeasy.cn
|
对于nginx而言web根目录下的隐藏目录默认情况下是不允许访问的,所以nginx情况下再执行非standalone模式申请ssl证书之前,需要将nginx网站根目录下的.well-known隐藏目录设置成允许访问。
申请过程中可能会需要输入邮箱接受通知,还有一个同意协议的选项,选y。
不出意外的话,证书文件会在以下的位置:
1
| /etc/letsencrypt/live/你的域名/
|
3.配置nginx
以前我们使用的是80(http)端口,而https协议是443端口,所以我们要将80端口转发到443端口,在你当前网站的配置文件里修改配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| server{ listen 80; server_name blog.ibeeasy.cn; rewrite ^(.*) https: }
server { listen 443 ssl http2; server_name blog.ibeeasy.cn; add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
ssl_certificate /etc/letsencrypt/live/blog.ibeeasy.cn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/blog.ibeeasy.cn/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-RC4-SHA:!ECDHE-RSA-RC4-SHA:ECDH-ECDSA-RC4-SHA:ECDH-RSA-RC4-SHA:ECDHE-RSA-AES256-SHA:HIGH:!RC4-SHA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!CBC:!EDH:!kEDH:!PSK:!SRP:!kECDH;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 60m; }
|
配置完成后重启Nginx或重新加载配置:
1 2 3 4
| systemctl restart nginx
systemctl reload nginx
|
至此,https协议就部署完成了,如果还是无法访问,请确定443端口是否开启,或者是否添加安全组443端口的入方向。
4.添加脚本执行证书更新
因为ssl证书的有效期是90天,所以我们要设置一个定时任务来自动更新证书,证书更新的命令如下:
1
| ./letsencrypt-auto renew
|
如果要指定更新某个域名的证书, 则要使用 certonly 参数,:
1
| ./letsencrypt-auto certonly --webroot --renew-by-default --email [email protected] -w /var/www/blog -d blog.ibeeasy.cn -d a.ibeeasy.cn
|
当然,官方也提供了 cron 运行脚本的方式可以实现定时续期,脚本如下:
1 2 3 4 5 6 7 8 9 10
|
systemctl stop nginx if ! /path/to/letsencrypt-auto renew -nvv --standalone > /var/log/letsencrypt/renew.log 2>&1 ; then echo Automated renewal failed: cat /var/log/letsencrypt/renew.log exit 1 fi
systemctl start nginx
|
将以上脚本保存为 letsencrypt-renew.sh
添加可执行权限:
1
| chmod +x letsencrypt-renew.sh
|
编辑 crontab 配置文件或执行crontab -e
添加 cron 任务:
我这里设置为每月1号0点执行此脚本.
1 2
| 0 0 1 * * root/脚本目录/letsencrypt-renew.sh
|
加入后Ctrl+X保存退出即可。