Let’s Encrypt 简介
如果要启用 HTTPS,我们就需要从证书授权机构(以下简称 CA) 处获取一个证书,Let’s Encrypt 就是一个 CA。我们可以从 Let’s Encrypt 获得网站域名的免费的证书。这篇文章也主要讲的是通过 Let’s Encrypt + Nginx 来让网站升级到 HTTPS。
配置防火墙
1 | # 打开端口443 |
安装 certbot 客户端
在这里获取源
1 | # CentOS 7 更新源 |
1 | sudo yum install certbot |
无法分配内存错误
1 | # 如果你的主机没有足够的内存,你可能会看到这样的错误 |
要解决此问题,您需要创建交换文件。交换文件的大小取决于你的内存
1 | M = 以 GB 为单位的 RAM 量 |
1 | fallocate -l 2048M /swapfile |
生成 HTTPS 证书
1 | certbot certonly --standalone -d example.com -d www.example.com |
1 | -d 参数指定域名,是期望开启 https 的域名 |
1 | # 会让你输入邮箱 |
1 | 最后,您的 TLS / SSL 证书将以折中的方式生成 |
证书文件
1 | cert.pem - 您的域的证书,由Apache使用 |
在 Nginx 上配置 TLS / SSL
Mozilla SSL Configuration Generator 这是 Mozilla 搞得一个 HTTPS 配置文件自动生成器,支持 Apache,Nginx 等多种服务器。按照这个配置文件,选择 Intermediate 的兼容性。这里生成的配置文件是业界最佳实践和结果
1 | server { |
1 | 重启nginx |
证书更新
前面生成的证书有效期为 3 个月,当快要到期时需要使用 certbot renew 命令更新证书。 在更新证书时需要先停止 nginx,然后输入 certbot renew –dry-run 模拟更新,如果模拟更新没有问题使用 certbot renew 更新证书后,再启动 nginx 进行测试。
Linux 服务器上使用 CronTab 定时执行
1 | crontab -e |
1 | 15 2 * */2 * certbot renew --pre-hook "systemctl stop nginx" --post-hook "systemctl restart nginx" |
–pre-hook 这个参数表示执行更新操作之前要做的事情,因为我有 –standalone 模式的证书,所以需要 停止 nginx 服务,解除端口占用。
–post-hook 这个参数表示执行更新操作完成后要做的事情,这里就恢复 nginx 服务的启用
用专业在线工具测试你的服务器 SSL 安全性
Qualys SSL Labs 提供了全面的 SSL 安全性测试,填写你的网站域名,给自己的 HTTPS 配置打个分。