共计 4686 个字符,预计需要花费 12 分钟才能阅读完成。
本教程将向您展示如何在 Ubuntu 16.04/17.10 上使用 Let’s Encrypt 在 Nginx 上正确启用 HTTPS。谷歌浏览器和 Firefox 已经开始提示未加密的网页是不安全的。最终所有的 HTTP 网页将被标记为不安全。HTTPS 将成为任何网站的默认设置。如果你想利用新的 HTTP/ 2 协议来加速你的网站,这也是一个要求。
Let’s Encrypt 加密是免费的 \ 自动的 \ 开放的认证机构。官方文档介绍了使用 Let’s Encrypt 启用 HTTPS 的简单步骤,但除此之外还有更多。如果你按照官方文档,你会得到一个关于 SSL 实验室的测试。如果你按照我的步骤,你会得到一个 A +。如果您之前已经部署了 Let’s Encrypt 证书,则仍然可以按照本教程进行更新并替换您的现有证书。
本教程分为 2 个部分。
- 第一部分是关于 CAA 记录,安全头(Security Headers)和 OCSP 装订。这些东西可以帮助你获得 A +。
- 第二部分是将 www 域重定向到非 www 域,反之亦然。
为您的域名创建 CAA 记录
证书颁发机构授权(Certificate Authority Authorization,CAA)是一种 DNS 资源记录,用于指定哪些证书颁发机构(CA)被允许为特定域名颁发证书。从 2017 年 9 月开始,所有 CA 都必须在颁发特定域名证书之前检查 CAA 记录。如果没有为域名找到 CAA 记录,则任何 CA 都可以为该域名颁发证书。如果您的 CAA 记录中没有列出 CA,则该 CA 无法为您的域名颁发证书。
要创建允许让我们加密的 CAA 记录为您的域名颁发证书,请在 DNS 服务器或 DNS 管理器中添加以下条目。
example.com. IN CAA 0 issue "letsencrypt.org"
你也可以使用
iodef 使 CA 向您的电子邮件地址报告恶意证书问题请求。
example.com. IN CAA 0 iodef "mailto:your-email-address"
上述记录的格式是区域文件。以下是您的一些提示。
您可以使用 SSLMate CAA Record Helper 为您的域名生成 CCA 记录。
如果您使用的是 GoDaddy DNS,请按照这个帖子添加 CAA 记录。
您可以使用下面的 dig 命令来检查您的 CAA 记录。
dig example.com CAA
请注意,Web 浏览器不检查 CAA 记录。
安全头(Security Headers)
安全性标头与 HTTPS 协议一样重要,但只有一小部分支持 HTTPS 的网站会注意这些标头。虽然关于安全性头文件的完整讨论超出了本教程的范围,但我想谈谈升级不安全请求和 HSTS 头文件,因为您可以使用 Let’s Encrypt 轻松启用它们来提高网站的安全性。
升级不安全的请求
有时候一个网站启用了 HTTPS,但是一些 CSS,图片或 JavaScript 仍然通过 HTTP 提供。在这种情况下,浏览器地址栏开头的绿色挂锁将消失。在 Google Chrome 中,它被一个信息图标取代; 在 Firefox 中,它被灰色的黄色三角形挂锁所取代。您将希望尽可能频繁地向站点访问者显示绿色的挂锁,解决此问题的简单方法是启用升级不安全请求标头,这将强制 Web 浏览器使用 https:// 对于每个 http:// 资源。
要启用这个头文件,只需在发出 certbot 命令时添加–uir 标志。请注意,此标头适用于托管在您自己的域上的资源以及支持 HTTPS 的第三方域上的资源。如果您的网页包含通过 HTTPS 无法访问的第三方服务器上的资源,那么这些资源将被 Web 浏览器阻止,但使用此标头可确保您的网页始终获得绿色的挂锁。
HSTS(HTTP 严格传输安全)
HSTS 头部告诉网络浏览器所有通信应该通过 HTTPS 完成。它防范 SSL Striping,这是一种从 HTTPS 降级到 HTTP 的攻击。要启用这个头文件,只需在发出 certbot 命令时添加–hsts 标志。
OCSP 装订
当 Web 浏览器连接到 HTTPS 网站时,它会向证书颁发机构(CA)发送 OCSP(在线证书状态协议)请求,以便查询网站 SSL 证书的撤销状态。根据 Firefox 的遥测数据,这可以延迟页面加载 1 - 3 秒。为了提高性能,网站所有者可以启用 OCSP 装订,在这种情况下,Web 服务器本身会定期获取由 CA 签署的 OCSP 响应,并将其发送到网络浏览器,从而无需 Web 浏览器联系 OCSP 服务器。
要启用 OCSP 装订,只需在发出 certbot 命令时添加–staple-ocsp 标志。
OCSP 必须装订
如果一个黑客做了一个假的,重复的网站,关闭 OCSP staple 并且阻止网络浏览器访问 OCSP 服务器,那么网络浏览器将认为它是正常的并且进入恶意网站。为了解决这个问题,你可以在你的网站上启用 OCSP,这个功能告诉浏览器在 HTTPS 连接期间,你的网站必须显示 OCSP 订书响应。因此,当浏览器连接到一个没有 OCSP 装订的假网站时,它将停止连接。
为了使 OCSP 必须装订,在发行 certbot 命令时添加 – 必须主标记。
安装我们在 Ubuntu 16.04 / 17.10 上加密客户端
现在是时候弄脏你的手了。启动 Ubuntu 16.04,让我们加密客户端包含在 Ubuntu 存储库。我的建议是,你从官方的 Certbot PPA 安装它,以获得最新版本。运行以下命令。如果要从 PPA 安装软件包,则需要使用 software-properties-common。在默认的 Ubuntu 服务器 Install 上经常会丢失。Python-certbot-nginx 是 Certbot 的 Nginx 插件。
sudo apt install software-properties-common
sudo add-apt-repository ppa:certbot/certbot
sudo apt update
sudo apt install certbot python-certbot-nginx
要检查版本号,请运行:
certbot --version
示例输出:
certbot 0.19.0
使用 Certbot Nginx 插件启用 HTTPS
如果您的网站没有使用 CDN 服务,那么建议使用 Nginx 插件在 Nginx Web 服务器上启用 HTTPS,因为它可以自动获取 SSL / TLS 证书并为您进行配置。在你的 Ubuntu 服务器上运行以下命令。
sudo certbot --nginx --agree-tos --redirect --uir --hsts --staple-ocsp --must-staple -d www.example.com,example.com --email your-email-address
说明:
-nginx:使用 Nginx 验证器和安装程序
-agree-tos:同意让我们加密服务条款
重定向:添加 301 重定向。
-uir:将“Content-Security-Policy:upgrade-insecure-requests”标题添加到每个 HTTP 响应。
-hsts:将 Strict-Transport-Security 头添加到每个 HTTP 响应。
-staple-ocsp:启用 OCSP 装订。
-must-staple:将 OCSP 必备装订扩展添加到证书。
- d 标志后面跟着一个由逗号分隔的域名列表。您最多可以添加 100 个域名。
– 电子邮件:用于注册和恢复联系人的电子邮件。
您将被问到是否要收到 EFF(电子前沿基金会)的电子邮件。选择 Y 或 N 后,您的 SSL 证书将自动获得并为您进行配置,如下面的消息所示。
现在,如果您访问您的网站,您可以看到 HTTP 被自动重定向到 HTTPS 连接。事实证明,Nginx 插件目前不支持 -hsts 和–uir 标志。要手动添加 HSTS 和升级不安全请求标头,请编辑您的 Nginx 服务器块。
sudo nano /etc/nginx/conf.d/example.com.conf
在服务器块中添加以下两行。
add_header Strict-Transport-Security“max-age=15768000; preload”always;
add_header Content-Security-Policy upgrade-insecure-requests;
保存并关闭文件。然后重新加载 Nginx 以使更改生效。
sudo systemctl reload nginx
测试您的 SSL 证书
转到 ssllabs.com 来测试您的 SSL 证书和配置。正如我所承诺的那样,你得到了 A +。您还可以检查您的域名是否启用了 CAA 记录,您的服务器是否启用了 HSTS,OCSP 装订和 OCSP 必须装订。
将 WWW 重定向到非 WWW(或副本)
我们已经启用了将 HTTP 重定向到 HTTPS,剩下的事情就是将 www 重定向到非 www,反之亦然。如果你使用 WordPress,那么这很容易。只需进入 WordPress 仪表板 > 设置 > 常规,并在 WordPress 地址和站点地址中设置您的首选版本(www 或非 www)。
如果你走这条路线,你将会得到所谓的双重 301 重定向。首先,Nginx 服务器将 HTTP 重定向到 HTTPS,然后 WordPress 重定向到 www 或非 www 域。有些人可能会认为,双 301 重定向可以伤害您的网站的搜索引擎优化。如果你担心这一点,那么你可以使用下面的方法,使所有域版本直接到最终目的地。
编辑你的 Nginx 服务器块。
sudo nano /etc/nginx/conf.d/example.com.conf
CertBot 客户端将以下行添加到文件以将 HTTP 重定向到 HTTPS。
if ($scheme !=“https”) {
return 301 https://$host$request_uri;
} # managed by Certbot
您可以删除这 3 行并编辑您的服务器块配置,如下面的屏幕截图,将非 www 重定向到 www 域。
第一个服务器块侦听端口 80. 它包含 301 重定向,将 HTTP 重定向到 HTTPS。
第二个服务器块侦听端口 443. 它包含 301 重定向,将非 www 重定向到 www 域。
如果您想将 www 重定向到非 www 域,请更改
return 301 https://www.example.com$request_uri;
为:
return 301 https://example.com$request_uri;
并更改 SSL 服务器块中的 server_name 指令。
保存并关闭文件。测试 Nginx 配置。
sudo nginx -t
如果测试成功,请重新加载 Nginx 以使更改生效。
sudo systemctl reload nginx
如果您使用 WordPress,请确保在编辑 Nginx 服务器块配置文件之前,将您的首选域版本设置为 WoredPress 地址和站点地址。如果 WordPress 的设置与 Nginx 配置相矛盾,您的网站将会处于重定向循环。
证书自动更新
要自动更新让我们加密证书,只需编辑 root 用户的 crontab 文件即可。
sudo crontab -e
然后在底部添加以下行。
@daily certbot renew –quiet && systemctl reload nginx
–quiet 标志将压制标准输出。如果您想要收到标准错误,请在 crontab 文件的开头添加以下行。
MAILTO=your-email-address
为了向客户提供新的证书,需要重新加载 Nginx。
更多 Ubuntu 相关信息见Ubuntu 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=2
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-12/149936.htm