在Ubuntu上通过Let’s Encrypt正确启用HTTPS

本教程将向您展示如何通过Ubuntu上的Let’s Encrypt在Apache上正确启用HTTPS。 Google Chrome和Firefox已经开始将带有密码输入框的未加密网页标记为不安全。 最终所有HTTP网页都将被标记为不安全。 HTTPS将成为所有网站的默认设置。 如果要利用HTTP / 2协议来加快网站速度,这也是一个要求。

您可能知道,Let’s Encrypt是一个免费,自动化和开放的证书颁发机构。 官方文档描述了您可以按照以下简单步骤启用“让我们加密”以启用HTTPS的功能,但不仅如此。 如果您遵循官方文档,您将获得评分 一种 在SSL Labs测试中。 如果按照我的步骤进行操作,您将获得 A +分数。 如果您之前已经部署过Let’s Encrypt证书,则仍然可以按照本教程来续订和替换现有证书。

在向您展示使用“让我们加密”启用HTTPS的步骤之前,我想先谈一谈 CAA记录, 安全头OCSP装订。 这些都是可以帮助您获得A +的东西。 在本教程的最后,我还将向您展示如何处理CloudFlare CDN服务。

注意:本教程适用于所有当前版本的Apache和Ubuntu(包括16.04、18.04和19.04)。

为您的域名创建CAA记录

证书颁发机构授权(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记录。

安全标题

安全标头与HTTPS一样重要,但是只有一小部分启用HTTPS的站点关注安全标头。 尽管有关安全标头的完整讨论超出了本教程的范围,但我想谈一谈 升级不安全的请求HSTS 标头,因为您可以使用“让我们加密”轻松启用它们,以提高网站的安全性。

升级不安全的请求

有时,网站已启用HTTPS,但仍通过HTTP提供某些CSS,图像或JavaScript。 在这种情况下,浏览器地址栏开头的绿色挂锁将消失。 在Google Chrome浏览器中,它已替换为信息图标; 在Firefox中,它已替换为带有黄色三角形的灰色挂锁。 您将希望向站点访问者显示一个绿色的挂锁,并且解决此问题的简便方法是启用 升级不安全的请求 标头,将强制网络浏览器使用 https:// 每一个 http:// 资源。

要启用此标头,只需添加 --uir 发行时标记 证书机器人 命令。 请注意,此标头适用于您自己的域上托管的资源以及支持HTTPS的第三方域上的资源。 如果您的网页包含第三方服务器上无法通过HTTPS进行访问的资源,则这些资源将被网络浏览器阻止,但是使用此标头可确保您的网页始终获得绿色的挂锁。

HSTS(HTTP严格传输安全性)

HSTS标头告诉Web浏览器与网站的所有通信均应通过HTTPS完成。 它可以防御SSL Striping,这是一种将HTTPS降级为HTTP的攻击。 要启用此标头,只需添加 --hsts 发行时标记 证书机器人 命令。

OCSP装订

当网络浏览器连接到HTTPS网站时,它将向证书颁发机构(CA)发送OCSP(在线证书状态协议)请求,以查询网站SSL证书的吊销状态。 根据Firefox遥测数据,这可以将页面加载延迟1-3秒。

为了提高性能,网站所有者可以启用OCSP装订,在这种情况下,Web服务器本身会定期获取由CA签名的OCSP响应,并将其发送到Web浏览器,从而无需Web浏览器联系OCSP服务器。

要启用OCSP装订,只需添加 --staple-ocsp 发行时标记 证书机器人 命令。

OCSP必须装订

如果黑客创建了一个伪造的重复网站,关闭了OCSP钉书钉,并且还阻止了Web浏览器对OCSP服务器的访问,则Web浏览器将认为还可以,并进入恶意网站。 要解决此问题,您可以启用OCSP必须在您的网站上装订,它告诉Web浏览器在HTTPS连接期间,您的网站必须呈现OCSP必须响应。 因此,当网络浏览器连接到没有OCSP订书钉的假网站时,它将停止连接。

要启用OCSP必须装订,请添加 --must-staple 发行时标记 证书机器人 命令。

在Ubuntu上安装Let’s Encrypt Client(Certbot)

现在该弄脏你的手了。 从Ubuntu 16.04开始,Ubuntu存储库中包含Let’s Encrypt客户端(Certbot)。我的建议是从官方Certbot PPA安装它以获取最新版本。 运行以下命令。 软件属性通用 如果要从PPA安装软件包,则为必填项。 在默认的Ubuntu服务器安装中经常会缺少它。 Python3-certbot-apache 是Certbot Apache插件。

sudo apt install software-properties-common

sudo add-apt-repository ppa:certbot/certbot

sudo apt update

sudo apt install certbot python3-certbot-apache

要检查版本号,请运行

certbot --version

样本输出:

certbot 0.31.0

使用Apache插件启用HTTPS

如果您的网站不使用CDN服务,则建议使用Apache插件在Apache Web服务器上启用HTTPS,因为它可以自动获取SSL / TLS证书并为您配置。 在Ubuntu服务器上运行以下命令。

sudo certbot --apache --agree-tos --redirect --uir --hsts --staple-ocsp --must-staple -d www.example.com,example.com --email [email protected]

说明:

  • --apache:使用Apache身份验证器和安装程序
  • --agree-tos:同意让我们加密服务条款
  • --redirect:自动将所有HTTP通信重定向到HTTPS
  • --uir:在每个HTTP响应中添加“ Content-Security-Policy:upgrade-insecure-requests”标头。
  • --hsts:将Strict-Transport-Security标头添加到每个HTTP响应。
  • --staple-ocsp:启用OCSP装订。
  • --must-staple:将OCSP必须装订扩展名添加到证书中。
  • -d 标志后面是域名列表,以逗号分隔。 您最多可以添加100个域名。
  • --email:用于注册和恢复联系的电子邮件。

系统将询问您是否要接收来自EFF(电子前沿基金会)的电子邮件。 选择Y或N后,将自动为您获取并配置您的SSL证书,如以下消息所示。

现在,如果您访问网站,则可以看到HTTP自动重定向到HTTPS连接。 请注意,certbot客户端创建 /etc/apache2/sites-enabled/example.com-le-ssl.conf 在为网站配置SSL时使用SSL虚拟主机。

测试您的SSL证书

转到ssllabs.com测试您的SSL证书和配置。 正如我所承诺的, A +。 您还可以检查您的域名是否已启用CAA记录,服务器是否已启用HSTS,OCSP装订和OCSP必须装订。

Ubuntu 16.04 certbot Apache

将WWW重定向到非WWW(或副版本)

我们已经启用了将HTTP重定向到HTTPS的功能,剩下要做的就是将www重定向到非www,反之亦然。 如果您使用的是WordPress,则非常简单。 只需转到 WordPress资讯主页 > 设定值 > 一般 并在中设置您的首选版本(www或非www) WordPress地址网站地址

letsencrypt apache重定向

如果走那条路线,您将得到所谓的double 301重定向。 首先,Apache服务器将HTTP重定向到HTTPS,然后WordPress重定向到www或非www域。

有人可能会争辩说,执行双301重定向可能会丢失SEO链接汁。 如果您对此感到担心,则可以使用下面的方法使所有域版本都直接到达最终目的地。

编辑您的虚拟主机文件。 (不是SSL虚拟主机)

sudo nano /etc/apache2/sites-enabled/example.com.conf

CertBot客户端在文件中添加了以下几行,以将HTTP重定向到HTTPS。

RewriteEngine on
RewriteCond %{SERVER_NAME} =example.com [OR]
RewriteCond %{SERVER_NAME} =www.example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

要重定向到www或非www域,您需要更改最后一行。 更换 %{SERVER_NAME} 以及如下所示的首选域版本。 (www域)

RewriteRule ^ https://www.example.com%{REQUEST_URI} [END,NE,R=permanent]

如果您更喜欢非www域,请将其更改为以下内容。

RewriteRule ^ https://example.com%{REQUEST_URI} [END,NE,R=permanent]

然后保存并关闭文件。 我们还需要编辑SSL虚拟主机。

sudo nano /etc/apache2/sites-enabled/example.com-le-ssl.conf

在结束标记上方添加以下行,以将非www重定向到www域。

RewriteEngine on
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^ https://www.example.com%{REQUEST_URI} [END,NE,R=permanent]

如果要将www重定向到非www域,请添加以下几行。

RewriteEngine on
RewriteCond %{SERVER_NAME} =www.example.com
RewriteRule ^ https://example.com%{REQUEST_URI} [END,NE,R=permanent]

保存并关闭文件。 重新加载Apache服务以使更改生效。

sudo systemctl reload apache2

更清楚地说,以下是我的Apache虚拟主机文件和SSL虚拟主机文件的屏幕快照,用于将非www重定向到www域。

certbot apache虚拟主机

Apache虚拟主机文件

letsencrypt apache虚拟主机

Apache SSL虚拟主机文件

如果您使用的是WordPress,请确保您在中设置了首选域版本 WoredPress地址网站地址 在编辑Apache虚拟主机文件之前。 如果WordPress设置与Apache配置矛盾,则您的网站将处于重定向循环中。

如何禁用TLSv1和TLSv1.1

TLSv1和TLSv1.1不再被认为是安全的。 要禁用它们,请编辑“让我们加密SSL”选项配置文件。

sudo nano /etc/letsencrypt/options-ssl-apache.conf

查找以下行,默认情况下禁用SSLv2和SSLv3。

SSLProtocol             all -SSLv2 -SSLv3

将其更改为以下内容也可以禁用TLSv1.0和TLSv1.1。

SSLProtocol             all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

保存并关闭文件。 然后重新启动Apache。

sudo systemctl restart apache2

证书自动续订

要自动续订我们的加密证书,只需编辑根用户的crontab文件。

sudo crontab -e

然后在底部添加以下行。

@daily certbot renew --quiet && systemctl reload apache2

--quiet 标志将禁止显示正常消息。 如果要接收错误消息,请在crontab文件的开头添加以下行。

MAILTO=your-email-address

为此,需要重新加载Apache才能将新证书提供给客户端。

CloudFlare CDN

您需要了解的第一件事是,如果您想在服务器上安装“让我们加密”证书并同时使用CloudFlare的CDN服务,那么您将需要在您的站点上启用CloudFlare的Universal SSL。

  • 站点访问者和CloudFlare边缘服务器之间的连接使用CloudFlare Universal SSL证书进行加密。
  • 原始服务器和CloudFlare边缘服务器之间的通信使用Let’s Encrypt颁发的证书进行加密。

如果在源服务器上安装了“让我们加密”证书,将HTTP重定向到HTTPS并关闭了CloudFlare Universal SSL,则Web浏览器将抱怨您的网站处于无限重定向循环中,因为CloudFlare将HTTPS重定向到HTTP。

您需要知道的第二件事是,如果您想在使用CloudFlare Universal SSL时启用CAA记录,那么您还需要创建以下CAA记录。

example.com. IN CAA 0 issue "comodoca.com"

example.com. IN CAA 0 issue "digicert.com"

example.com. IN CAA 0 issue "globalsign.com

按照这篇文章添加CloudFlare Universal SSL证书的CAA记录。

那么,如何使用CloudFlare安装“让我们加密”证书呢? 好吧,有两种情况。

  1. 您已经使用上述步骤安装了“让我们加密证书”,现在您想要启用CloudFlare CDN服务。
  2. 您的网站正在使用CloudFlare CDN服务,现在您想在源服务器上安装Let’s Encrypt证书。

第一种情况

如果您处于第一种情况,则可以继续以下步骤,启用CloudFlare CDN服务,并在CloudFlare Dashboard中启用CloudFlare Universal SSL: 加密货币 > SSL协议 然后选择 满(严格)。 您的网站可以正常运行,没有问题。

第二种情况

如果使用CloudFlare CDN,现在要在原始服务器上安装Let’s Encrypt,则运行以下命令以获取并安装Let’s Encrypt TLS证书。

sudo certbot --apache --agree-tos --redirect --uir --hsts --staple-ocsp --must-staple -d www.example.com,example.com --email [email protected]

在获取证书并将其安装在服务器上之后,转到Cloudflare仪表板并启用CloudFlare Universal SSL。

包起来

希望本教程对您有所帮助 在Ubuntu上通过Let’s Encrypt在Apache虚拟主机上启用HTTPS。 与往常一样,如果您发现此帖子有用,请订阅我们的免费新闻通讯。 在下一个教程中,我们将看到如何使用Apache启用HTTP / 2协议来加速网站。

Sidebar