View a markdown version of this page

使用 “让我们加密” 和 Certbot 在你的 LAMP 实例上启用 HTTPS - Amazon Lightsail

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 “让我们加密” 和 Certbot 在你的 LAMP 实例上启用 HTTPS

使用 Lightsail 负载均衡器,Amazon SSL/TLS Lightsail 可以轻松保护您的网站和应用程序。但是,使用 Lightsail 负载均衡器通常可能不是正确的选择。您的站点可能不需要负载均衡器提供的可扩展性或容错能力,或者您可能针对成本进行了优化。

在后一种情况下,您可能会考虑使用 Let's Encrypt 获取免费 SSL 证书。本教程向您展示如何使用 Certbot 申请 Let's Encrypt 通配符证书,以及如何在 Lightsail 打包的 LAMP 实例上对其进行配置。

内容

步骤 1:完成先决条件

如果您尚未完成以下先决条件,请完成这些先决条件:

  • 在 Lightsail 中创建一个 LAMP 实例。要了解更多信息,请参阅创建实例

  • 注册一个域名,并获取管理访问权限以编辑其 DNS 记录。要了解更多信息,请参阅 DNS

    注意

    我们建议您使用 Lightsail DNS 区域来管理域名的 DNS 记录。要了解更多信息,请参阅创建 DNS 区域来管理您的域名的 DNS 记录

  • 在 Lightsail 控制台中使用基于浏览器的 SSH 终端来执行本教程中的步骤。但是,您也可以使用自己的 SSH 客户端(如 PuTTY)。要了解有关配置 PuTTY 的更多信息,请参阅下载并设置 PuTTY 以使用 SSH 进行连接

完成先决条件后,请继续执行本教程的下一部分

第 2 步:在你的 Lightsail 实例上安装 Certbot

Certbot 是一个客户端,用于向 Let's Encrypt 请求证书并将其部署到 Web 服务器。Let's Encrypt 使用 ACME 协议来颁发证书,而 Certbot 是与 Let's Encrypt 交互的 ACME-enabled 客户端。

在你的 Lightsail 实例上安装 Certbot
  1. 登录 Lightsail 控制台

  2. 在 Lightsail 主页的实例选项卡上,选择要连接的实例的 SSH 快速连接图标。

    在 Lightsail 主页上使用 SSH 快速连接。
  3. 连接基于 Lightsail 浏览器的 SSH 会话后,输入以下命令以更新实例上的软件包:

    sudo apt-get update
  4. 输入以下命令以安装软件属性包。Certbot 的开发者使用个人软件包档案 (PPA) 来分发 Certbot。借助软件属性包,您可以更高效地使用 PPA。

    sudo apt-get install software-properties-common -y
  5. 输入以下命令来更新 apt,以包含新的存储库:

    sudo apt-get update -y
  6. 输入以下命令以安装 Certbot:

    sudo apt-get install certbot -y

    Certbot 现已安装在你的 Lightsail 实例上。

使基于浏览器的 SSH 终端窗口保持打开状态 - 您将在本教程的稍后部分返回到该窗口。继续执行本教程的下一部分

步骤 3:请求 Let's Encrypt SSL 通配符证书

开始向 Let's Encrypt 申请证书的过程。使用 Certbot 请求通配符证书,您可以将单个证书同时用于某个域及其子域。例如,一个通配符证书可适用于 example.com 顶级域、blog.example.com 以及 stuff.example.com 子域。

申请 Let's Encrypt SSL 通配符证书
  1. 在本教程上一步中使用的基于浏览器的 SSH 终端窗口中,输入以下命令为您的域设置环境变量。请务必将 domain 替换为您注册的域名。

    DOMAIN=domain WILDCARD=*.$DOMAIN

    示例:

    DOMAIN=example.com WILDCARD=*.$DOMAIN
  2. 输入以下命令以确认变量返回正确的值:

    echo $DOMAIN && echo $WILDCARD

    您应该会看到类似以下内容的结果:

    确认域的环境变量。
  3. 输入以下命令以交互模式启动 Certbot。此命令指示 Certbot 使用具有 DNS 质询的手动授权方法验证域所有权。它可以为您的顶级域及其子域请求通配符证书。

    sudo certbot -d $DOMAIN -d $WILDCARD --manual --preferred-challenges dns certonly
  4. 出现提示时输入您的电子邮件地址,因为该地址用于续订和安全通知。

  5. 阅读 Let's Encrypt 服务条款。阅读完后,如果您同意该服务条款,请按 A。如果您不同意,则无法获得 Let's Encrypt 证书。

  6. 针对共享您电子邮件地址的提示以及有关您的 IP 地址已被记录的警告相应地做出响应。

  7. Let's Encrypt 现在会提示您验证您是否拥有指定的域名。您可以通过将 TXT 记录添加到域的 DNS 记录执行此操作。系统会提供一组 TXT 记录值,如以下示例所示:

    注意

    Let's Encrypt 可以提供您必须用于验证的单个或多个 TXT 记录。在本示例中,向我们提供了两个 TXT 记录用于验证。

    Let's Encrypt 证书的 TXT 记录。

保持基于 Lightsail 浏览器的 SSH 会话处于打开状态,本教程稍后将返回该会话。继续执行本教程的下一部分

步骤 4:将 TXT 记录添加到域的 DNS 区域

向域名的 DNS 区域添加 TXT 记录可验证您是否拥有该域名。出于演示目的,我们使用 Lightsail DNS 区域。但是,该步骤可能类似于通常由域注册商托管的其他 DNS 区域。

注意

要详细了解如何为您的域名创建 Lightsail DNS 区域,请参阅在 L ightsail 中创建 DNS 区域来管理您的域名的 DNS 记录

在 Lightsail 中向你的域名的 DNS 区域添加 TXT 记录
  1. 在左侧导航窗格中,选择域和 DNS

  2. 在页面的 DNS 区域部分下,选择您在 Certbot 证书请求中指定的域的 DNS 区域。

  3. 在 DNS 区域编辑器中,选择 DNS records(DNS 记录)。

  4. 选择添加记录

  5. Record type(记录类型)下拉菜单中,选择 TXT record(TXT 记录)。

  6. 记录名称响应方式字段中输入 Let's Encrypt 证书请求指定的值。

    注意

    Lightsail 控制台会预先填充域的顶级域部分。例如,如果想要添加子域 _acme-challenge.example.com,您只需在文本框中输入 _acme-challenge,您保存此记录时 Lightsail 会添加 .example.com 部分。

  7. 选择保存

  8. 重复步骤 4 到 7,添加由 Let's Encrypt 证书请求指定的第二组 TXT 记录。

保持 Lightsail 控制台浏览器窗口处于打开状态,本教程稍后将返回该窗口。继续执行本教程的下一部分

步骤 5:确认 TXT 记录已传播

使用该 MxToolbox 实用程序确认 TXT 记录已传播到互联网的 DNS。DNS 记录传播可能需要一段时间,具体取决于您的 DNS 托管提供商以及已为 DNS 记录配置的生存时间 (TTL)。请务必完成此步骤,并确认您的 TXT 记录已传播,然后再继续执行 Certbot 证书请求。否则,您的证书请求将失败。

确认 TXT 记录已传播到互联网的 DNS
  1. 打开一个新的浏览器窗口并转至https://mxtoolbox.com/TXTLookup.aspx

  2. 在文本框中输入以下文本。请务必将 domain 替换为您的域。

    _acme-challenge.domain

    示例:

    _acme-challenge.example.com
    MxToolbox TXT 记录查找。
  3. 选择 TXT Lookup (TXT 查找) 以运行检查。

  4. 此时将出现以下任一响应:

    • 如果您的 TXT 记录已传播到互联网的 DNS,您会看到类似于以下屏幕截图所示的响应。关闭浏览器窗口,然后继续执行本教程的下一部分。

      确认 TXT 记录已传播。
    • 如果您的 TXT 记录尚未传播到互联网的 DNS,则会看到 “未找到 DNS 记录” 的响应。确认您在域名的 DNS 区域中添加了正确的 DNS 记录。如果您添加了正确的记录,请稍等片刻,让您的域名的 DNS 记录传播,然后再次运行 TXT 查询。

第 6 步:完成 “让我们加密 SSL 证书” 申请

返回您的 LAMP 实例的基于 Limtsail 浏览器的 SSH 会话,然后完成 Let's Encrypt 证书申请。Certbot 会将您的 SSL 证书、证书链和密钥文件保存在 LAMP 实例上的特定目录中。

要完成 “让我们加密 SSL 证书” 申请
  1. 在您的 LAMP 实例的基于 Lightsail 浏览器的 SSH 会话中,按 Enter 继续您的 Let's Encrypt SSL 证书申请。如果成功,系统将显示类似于以下屏幕截图中的响应:

    成功的 Let's Encrypt 证书请求。

    此消息可确认您的证书、证书链和密钥文件都存储在 /etc/letsencrypt/live/domain/ 目录中。请务必将 domain 替换为您的域,如 /etc/letsencrypt/live/example.com/

  2. 记录消息中指定的到期日期。您可以在该日期之前续订证书。

    Let's Encrypt 证书续订日期。
  3. 现在您已经拥有了 Let's Encrypt SSL 证书,请继续阅读本教程的下一部分

第 7 步:在 LAMP 服务器目录中创建指向 Let's Encrypt 证书文件的链接

在 LAMP 实例的 LAMP 服务器目录中创建指向 Let's Encrypt SSL 证书文件的链接。此外,请备份现有证书,以便之后需要。

在 LAMP 服务器目录中创建指向 Let's Encrypt 证书文件的链接
  1. 在您的 LAMP 实例的基于 Lightsail 浏览器的 SSH 会话中,输入以下命令以停止底层服务:

    sudo systemctl stop apache2 sudo systemctl stop mariadb
  2. 运行以下命令更改 SSL 配置:

    sudo sed \ -i -e "s|SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem|SSLCertificateFile /etc/letsencrypt/live/$DOMAIN/fullchain.pem|g" \ -i -e "s|SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key|SSLCertificateKeyFile /etc/letsencrypt/live/$DOMAIN/privkey.pem|g" \ /etc/apache2/sites-enabled/default-ssl.conf
    注意

    如果您在步骤 3 中设置DOMAIN变量后关闭了基于浏览器的 SSH 终端窗口,请DOMAIN=example.com再次运行,example.com替换为您的域。

  3. 输入以下命令以重新启动 apache2:

    sudo systemctl restart apache2 sudo systemctl restart mariadb

    您的 LAMP 实例现已配置为自动将连接从 HTTP 重新导向到 HTTPS。当访问者访问 http://www.example.com 时,系统会自动将其重新导向至已加密的 https://www.example.com 地址。

第 8 步:每 90 天续订 Let's Encrypt 证书

让我们加密证书的有效期为 90 天。证书可以在到期前 30 天续订。要续订 Let's Encrypt 证书,请运行用于获取它们的原始命令。重复本教程的 “申请 Let's Encrypt SSL 通配符证书” 部分中的步骤。