闲话不多说,来!
第一步,获取证书 ps: 免费的哦,而且不像自签名的那种证书浏览器会不认
很简单,先安装certbot命令:yum install certbot
然后使用此命令生成证书:
certbot certonly --webroot -w /var/www/example -d example.com -d www.example.com
注:看不懂以上?不会么?参考官方网站:https://certbot.eff.org/
这边说明下, /var/www/example 是你现在网站可以访问的根目录,在生成时它会创建一个 .well-known 文件夹去验证你是否有这个网站的权限,然后 -d 后面是证书匹配的域名,可以多个,example.com 请换成你的域名。
然后是一个引导窗口你就填个email然后确认基本上等待验证就能成功了(千万别在screen里运行,否则像我一开始一样全部是蓝屏看不到字)
生成证书后,证书在 /etc/letsencrypt/live/example.com/ 目录
server { listen 443 ssl http2; ssl on; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_dhparam /etc/nginx/ssl/dhparam.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4'; }
以上是nginx的https相关的基本配置(其它参数不写了,自行加上,以上参数说明请见参阅内容第3个,ssl_protocols 主要用的安全协议,ssl_ciphers 是禁用的不安全的协议,这里不赘述了)
这里需要自己生成个 dhparam.pem 文件,执行如下命令即可:
mkdir /etc/nginx/ssl/ openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
这是加强 HTTPS 安全性的,如果嫌麻烦,把 ssl_dhparam 参数删掉就可以了。
因为证书是半年有效期的,所以需要定期更新
先在命令行模拟证书更新:
sudo certbot renew --dry-run
模拟更新成功的效果如下:
------------------------------------------------------------------------------- Processing /etc/letsencrypt/renewal/your.domain.com.conf ------------------------------------------------------------------------------- ** DRY RUN: simulating 'certbot renew' close to cert expiry ** (The test certificates below have not been saved.) Congratulations, all renewals succeeded. The following certs have been renewed: /etc/letsencrypt/live/your.domain.com/fullchain.pem (success) ** DRY RUN: simulating 'certbot renew' close to cert expiry ** (The test certificates above have not been saved.)
既然模拟成功,我们就使用crontab -e的命令来启用自动任务,命令行:
sudo crontab -e
添加配置:
30 2 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log
上面的执行时间为:每周一半夜2点30分执行renew任务。
你可以在命令行执行/usr/bin/certbot renew >> /var/log/le-renew.log 看看是否执行正常,如果一切OK,那么我们的配置到此结束!
参阅:
2、https://ksmx.me/letsencrypt-ssl-https/
3、https://aotu.io/notes/2016/08/16/nginx-https/