本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 “让我们加密” 和 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
-
登录 Lightsail 控制台
。 -
在 Lightsail 主页的实例选项卡上,选择要连接的实例的 SSH 快速连接图标。
-
连接基于 Lightsail 浏览器的 SSH 会话后,输入以下命令以更新实例上的软件包:
sudo apt-get update -
输入以下命令以安装软件属性包。Certbot 的开发者使用个人软件包档案 (PPA) 来分发 Certbot。借助软件属性包,您可以更高效地使用 PPA。
sudo apt-get install software-properties-common -y -
输入以下命令来更新 apt,以包含新的存储库:
sudo apt-get update -y -
输入以下命令以安装 Certbot:
sudo apt-get install certbot -yCertbot 现已安装在你的 Lightsail 实例上。
使基于浏览器的 SSH 终端窗口保持打开状态 - 您将在本教程的稍后部分返回到该窗口。继续执行本教程的下一部分。
步骤 3:请求 Let's Encrypt SSL 通配符证书
开始向 Let's Encrypt 申请证书的过程。使用 Certbot 请求通配符证书,您可以将单个证书同时用于某个域及其子域。例如,一个通配符证书可适用于 example.com 顶级域、blog.example.com 以及 stuff.example.com 子域。
申请 Let's Encrypt SSL 通配符证书
-
在本教程上一步中使用的基于浏览器的 SSH 终端窗口中,输入以下命令为您的域设置环境变量。请务必将
domain替换为您注册的域名。DOMAIN=domainWILDCARD=*.$DOMAIN示例:
DOMAIN=example.com WILDCARD=*.$DOMAIN -
输入以下命令以确认变量返回正确的值:
echo $DOMAIN && echo $WILDCARD您应该会看到类似以下内容的结果:
-
输入以下命令以交互模式启动 Certbot。此命令指示 Certbot 使用具有 DNS 质询的手动授权方法验证域所有权。它可以为您的顶级域及其子域请求通配符证书。
sudo certbot -d $DOMAIN -d $WILDCARD --manual --preferred-challenges dns certonly -
出现提示时输入您的电子邮件地址,因为该地址用于续订和安全通知。
-
阅读 Let's Encrypt 服务条款。阅读完后,如果您同意该服务条款,请按 A。如果您不同意,则无法获得 Let's Encrypt 证书。
-
针对共享您电子邮件地址的提示以及有关您的 IP 地址已被记录的警告相应地做出响应。
-
Let's Encrypt 现在会提示您验证您是否拥有指定的域名。您可以通过将 TXT 记录添加到域的 DNS 记录执行此操作。系统会提供一组 TXT 记录值,如以下示例所示:
注意
Let's Encrypt 可以提供您必须用于验证的单个或多个 TXT 记录。在本示例中,向我们提供了两个 TXT 记录用于验证。
保持基于 Lightsail 浏览器的 SSH 会话处于打开状态,本教程稍后将返回该会话。继续执行本教程的下一部分。
步骤 4:将 TXT 记录添加到域的 DNS 区域
向域名的 DNS 区域添加 TXT 记录可验证您是否拥有该域名。出于演示目的,我们使用 Lightsail DNS 区域。但是,该步骤可能类似于通常由域注册商托管的其他 DNS 区域。
注意
要详细了解如何为您的域名创建 Lightsail DNS 区域,请参阅在 L ightsail 中创建 DNS 区域来管理您的域名的 DNS 记录。
在 Lightsail 中向你的域名的 DNS 区域添加 TXT 记录
-
在左侧导航窗格中,选择域和 DNS。
-
在页面的 DNS 区域部分下,选择您在 Certbot 证书请求中指定的域的 DNS 区域。
-
在 DNS 区域编辑器中,选择 DNS records(DNS 记录)。
-
选择添加记录。
-
在 Record type(记录类型)下拉菜单中,选择 TXT record(TXT 记录)。
-
在记录名称和响应方式字段中输入 Let's Encrypt 证书请求指定的值。
注意
Lightsail 控制台会预先填充域的顶级域部分。例如,如果想要添加子域
,您只需在文本框中输入_acme-challenge.example.com,您保存此记录时 Lightsail 会添加_acme-challenge.example.com部分。 -
选择保存。
-
重复步骤 4 到 7,添加由 Let's Encrypt 证书请求指定的第二组 TXT 记录。
保持 Lightsail 控制台浏览器窗口处于打开状态,本教程稍后将返回该窗口。继续执行本教程的下一部分。
步骤 5:确认 TXT 记录已传播
使用该 MxToolbox 实用程序确认 TXT 记录已传播到互联网的 DNS。DNS 记录传播可能需要一段时间,具体取决于您的 DNS 托管提供商以及已为 DNS 记录配置的生存时间 (TTL)。请务必完成此步骤,并确认您的 TXT 记录已传播,然后再继续执行 Certbot 证书请求。否则,您的证书请求将失败。
确认 TXT 记录已传播到互联网的 DNS
-
打开一个新的浏览器窗口并转至https://mxtoolbox.com/TXTLookup.aspx
。 -
在文本框中输入以下文本。请务必将
domain替换为您的域。_acme-challenge.domain示例:
_acme-challenge.example.com
-
选择 TXT Lookup (TXT 查找) 以运行检查。
-
此时将出现以下任一响应:
-
如果您的 TXT 记录已传播到互联网的 DNS,您会看到类似于以下屏幕截图所示的响应。关闭浏览器窗口,然后继续执行本教程的下一部分。
-
如果您的 TXT 记录尚未传播到互联网的 DNS,则会看到 “未找到 DNS 记录” 的响应。确认您在域名的 DNS 区域中添加了正确的 DNS 记录。如果您添加了正确的记录,请稍等片刻,让您的域名的 DNS 记录传播,然后再次运行 TXT 查询。
-
第 6 步:完成 “让我们加密 SSL 证书” 申请
返回您的 LAMP 实例的基于 Limtsail 浏览器的 SSH 会话,然后完成 Let's Encrypt 证书申请。Certbot 会将您的 SSL 证书、证书链和密钥文件保存在 LAMP 实例上的特定目录中。
要完成 “让我们加密 SSL 证书” 申请
-
在您的 LAMP 实例的基于 Lightsail 浏览器的 SSH 会话中,按 Enter 继续您的 Let's Encrypt SSL 证书申请。如果成功,系统将显示类似于以下屏幕截图中的响应:
此消息可确认您的证书、证书链和密钥文件都存储在
/etc/letsencrypt/live/目录中。请务必将domain/domain替换为您的域,如/etc/letsencrypt/live/example.com/。 -
记录消息中指定的到期日期。您可以在该日期之前续订证书。
-
现在您已经拥有了 Let's Encrypt SSL 证书,请继续阅读本教程的下一部分。
第 7 步:在 LAMP 服务器目录中创建指向 Let's Encrypt 证书文件的链接
在 LAMP 实例的 LAMP 服务器目录中创建指向 Let's Encrypt SSL 证书文件的链接。此外,请备份现有证书,以便之后需要。
在 LAMP 服务器目录中创建指向 Let's Encrypt 证书文件的链接
-
在您的 LAMP 实例的基于 Lightsail 浏览器的 SSH 会话中,输入以下命令以停止底层服务:
sudo systemctl stop apache2 sudo systemctl stop mariadb -
运行以下命令更改 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.comexample.com替换为您的域。 -
输入以下命令以重新启动 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 通配符证书” 部分中的步骤。