将 Let's Encrypt SSL 证书与 Amazon Lightsail 中的 CentOS7+Nginx 实例结合使用

以 Nginx 作为 Web 服务器的 CentOS 7 服务器上设置 Let's Encrypt SSL 证书。完成本文中描述的说明后,您应该能够使用 HTTPS 访问您的站点。

Let's Encrypt :Let's Encrypt是一个于2015年三季度推出的数字证书认证机构,旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为安全网站提供免费的传输层安全性协议证书。 https://zh.wikipedia.org/zh-cn/Let's_Encrypt

 Certbot 最流行的基于Let's Encrypt 的客户端,用于在服务器上简化HTTPS(SSL/TLS)证书的申请流程。 (https://certbot.eff.org).

步骤1 完成先决条件

安装 Extra Packages for Enterprise Linux (EPEL) 包,需要一个运行 CentOS 7 的服务器或 VPS,以及一个具有 sudo 权限的用户,或者访问 root 用户本身。假设此处描述的以下命令由 root 用户执行。让我们安装 EPEL 包:

$ yum install epel-release 

然后更新系统中的包,将新的包列表添加到包管理器中:

 $ yum update

步骤2 安装Certbot

$sudo yum install certbot

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

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

  1. 输入以下命令为您的域设置环境变量。现在,您可以更高效地复制和粘贴命令以获取证书。请务必将 domain 替换为您注册的域名。DOMAIN=domainWILDCARD=*.$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 记录用于验证。

步骤 4:在 Lightsail 中将 TXT 记录添加到域的 DNS 记录

注意:此步骤可根据域名注册商进行相应解析

将 TXT 记录添加到您的域的 DNS 区域中会验证您拥有该域。为方便演示,我们使用 Lightsail DNS 区域。但是,该步骤可能类似于通常由域注册商托管的其他 DNS 区域。

注意

要详细了解如何创建域的 Lightsail DNS 区域,请参阅在 Amazon Lightsail 中创建 DNS 区域以管理域的 DNS 记录

  1. 在 Lightsail 主页上,选择 Networking(联网)选项卡。
  2. 在页面的 DNS 区域部分下,选择您在 Certbot 证书请求中指定的域的 DNS 区域。
  3. 在 DNS 区域编辑器中,选择添加记录。Lightsail 控制台中的 DNS 区域编辑器。
  4. 在记录类型下拉菜单中,选择 TXT record (TXT 记录)。
  5. 将 Let's Encrypt 证书请求指定的值输入到 Subdomain (子域) 和 Responds with (响应内容) 字段,如以下屏幕截图中所示。Lightsail DNS 区域编辑器中的 TXT 记录。
  6. 选择保存图标。
  7. 重复执行步骤 3 到 6,以添加 Let's Encrypt 证书请求指定的另一组 TXT 记录。

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

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

  1. 打开一个新浏览器窗口,然后转至 https://mxtoolbox.com/TXTLookup.aspx
  2. 在文本框中输入以下文本。请务必将 domain 替换为您的域。_acme-challenge.domain例如:_acme-challenge.example.comMxToolbox TXT 记录查找。
  3. 选择 TXT Lookup (TXT 查找) 以运行检查。
  4. 此时将出现以下任一响应:
    • 如果您的 TXT 记录已传播到 Internet 的 DNS,您将看到类似于以下屏幕截图中所示的响应。关闭浏览器窗口,然后继续执行本教程的下一部分确认 TXT 记录已传播。
    • 如果您的 TXT 记录尚未传播到 Internet 的 DNS,您会看到 DNS Record not found (未找到 DNS 记录) 响应。确认您已将正确的 DNS 记录添加到域的 DNS 区域。如果您已添加正确的记录,请等待一段时间,让域的 DNS 记录传播,然后再次运行 TXT 查找。

步骤 6:完成 Let's Encrypt SSL 证书请求

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

  1. 在 Nginx 实例的基于浏览器的 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 证书。

第2部分

安装 certbot-nginx插件

$ yum install certbot-nginx

通过添加包含 Certbot 创建的证书和私钥的路径的相关行来自动修改您的 Nginx 配置,然后最终重新加载 Nginx。

$ certbot --nginx

只需按照 Certbot 提供的指南,输入您的电子邮件,您的服务器现在应该设置了 SSL!

第3部分 其他注意事项

自动更新证书

Let's Encrypt 颁发的 SSL 证书有效期为 90 天。但是,我们可以通过添加一个 cronjob 来自动化更新证书的过程,该 cronjob 会定期检查证书的到期状态并在需要时更新证书。

$ crontab -e
0 2 * * * /usr/bin/certbot renew --quiet
//每天凌晨 2:00 运行 certbot 命令。 –quiet 选项告诉 certbot 不要产生任何输出。保存并退出编辑器。

防火墙设置(可选)

Firewall settings (optional)

CentOS 7 comes with the default firewall program called firewalld. You may choose to completely disable this to guarantee that no connections will be stopped from/to your server. However, if you wish to use it on your system, you need to configure firewalld to allow HTTPS access to your server.

The following command configures firewalld to allow both HTTP and HTTPS connections.

$ firewall-cmd --permanent --add-service=http --add-service=https

Reload the the firewall in order for the changes to take effect:

$ firewall-cmd --reload

That’s all there is to it – you now have your firewall running while still allowing for HTTP and HTTPS requests to come through.

证书状态检测

您可以使用云安全公司 Qualys 的 SSL 服务器测试来确保 Certbot 正确创建了您的 SSL 证书。

Web 浏览器中打开以下链接,将 example.com 替换为您的基本域:

https://www.ssllabs.com/ssltest/analyze.html?d=example.com