如何在 Ubuntu 16.04 上使用 Let's Encrypt 加密 Nginx

介绍

Let's Encrypt 是一个证书授权机构(CA),它提供了一个简单的方法来获取和安装免费的 TLS/SSL 证书,从而在 Web 服务器上允许加密 HTTPS. 它通过提供一个软件客户端,Certbot,它试图自动化大多数(如果不是所有)所需的步骤来简化这个过程。

在本教程中,您将使用 Certbot 在 Ubuntu 16.04 上获得免费的 Nginx SSL 证书,并设置您的证书自动更新。

本教程使用了默认的 Nginx 配置文件,而不是单独的服务器封锁文件。 我们建议为每个域创建新的 Nginx 服务器封锁文件,因为它有助于避免一些常见的错误,并将默认文件作为故障配置作为预期。

前提条件

要遵循本教程,您将需要:

  • 一个 Ubuntu 16.04 服务器设置为此 初始服务器设置为 Ubuntu 16.04 教程,包括一个 sudo 非根用户和防火墙。
  • 一个完全注册的域名. 本教程将使用 example.com 在整个范围内。 您可以在 Namecheap上购买域名,在 Freenom上免费获得一个,或者使用您选择的域名注册器。
  • 以下两个 DNS 记录为您的服务器设置。 您可以遵循 此主机名教程 有关如何添加它们的详细信息。
  • 一个记录与 example.com 指向您的服务器的公共

步骤1:安装Certbot

使用 Let's Encrypt 获得 SSL 证书的第一步是将 Certbot 软件安装到您的服务器上。

Certbot 正处于非常活跃的开发阶段,因此 Ubuntu 提供的 Certbot 包往往过时,然而,Certbot 开发人员维护了具有最新版本的 Ubuntu 软件存储库,所以我们会使用该存储库。

首先,添加存储器。

1sudo add-apt-repository ppa:certbot/certbot

然后,更新包列表以获取新存储库的包信息。

1sudo apt-get update

最后,安装 Certbot 的 Nginx 包,使用apt-get

1sudo apt-get install python-certbot-nginx

Certbot 现在已经准备好使用,但为了为 Nginx 配置 SSL,我们需要验证 Nginx 的某些配置。

第2步:设置 Nginx

Certbot 可以自动为 Nginx 配置 SSL,但它需要能够在您的配置中找到正确的服务器块。

如果你开始使用新的 Nginx 安装,你可以更新默认的 config 文件. 使用nano或你喜欢的文本编辑器打开它。

1sudo nano /etc/nginx/sites-available/default

查找现有的 server_name 行,并用您的域名替换 underscore, _:

1[label /etc/nginx/sites-available/default]
2. . .
3server_name example.com www.example.com;
4. . .

保存文件并离开编辑器。

然后,检查您的配置编辑的语法。

1sudo nginx -t

如果您收到任何错误,请重新打开文件并检查打字,然后再次测试它。

一旦您的配置语法正确,请重新加载 Nginx 来加载新配置。

1sudo systemctl reload nginx

Certbot 现在将能够找到正确的服务器块并更新它,接下来,我们将更新我们的防火墙以允许 HTTPS 流量。

步骤 3 – 通过防火墙允许 HTTPS

如果您已启用ufw防火墙,根据前提指南的建议,您将需要调整设置以允许HTTPS流量。

您可以通过键入查看当前设置:

1sudo ufw status

它可能看起来像这样,这意味着只有HTTP流量被允许到Web服务器:

1[secondary_label Output]
2Status: active
3
4To Action From
5--                         ------      ----
6OpenSSH ALLOW Anywhere                  
7Nginx HTTP ALLOW Anywhere                  
8OpenSSH (v6)               ALLOW Anywhere (v6)             
9Nginx HTTP (v6)            ALLOW Anywhere (v6)

为了进一步允许 HTTPS 流量,我们可以允许 Nginx 完整配置文件,然后删除多余的 Nginx HTTP 配置文件允许:

1sudo ufw allow 'Nginx Full'
2sudo ufw delete allow 'Nginx HTTP'

你的状态现在应该是这样的:

1sudo ufw status
1[secondary_label Output]
2Status: active
3
4To Action From
5--                         ------      ----
6OpenSSH ALLOW Anywhere
7Nginx Full ALLOW Anywhere
8OpenSSH (v6)               ALLOW Anywhere (v6)
9Nginx Full (v6)            ALLOW Anywhere (v6)

我们现在准备运行Certbot并收集我们的证书。

第4步:获取SSL证书

Certbot 提供了通过各种插件获得 SSL 证书的多种方式。 Nginx 插件将负责重新配置 Nginx 并在必要时重新加载配置:

1sudo certbot --nginx -d example.com -d www.example.com

这将运行certbot--nginx插件,使用-d来指定我们希望证书有效的名称。

如果这是你第一次运行certbot,你将被要求输入电子邮件地址并同意服务条款. 这样做后,certbot将与 Let’s Encrypt 服务器进行通信,然后运行一个挑战,以验证你控制的域,你正在请求证书。

如果成功,certbot 会问你要如何配置你的 HTTPS 设置。

1[secondary_label Output]
2Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
3-------------------------------------------------------------------------------
41: No redirect - Make no further changes to the webserver configuration.
52: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
6new sites, or if you're confident your site works on HTTPS. You can undo this
7change by editing your web server's configuration.
8-------------------------------------------------------------------------------
9Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

选择你的选择,然后点击ENTER。配置将被更新,Nginx将重新加载以获取新的设置。

 1[secondary_label Output]
 2IMPORTANT NOTES:
 3 - Congratulations! Your certificate and chain have been saved at
 4   /etc/letsencrypt/live/example.com/fullchain.pem. Your cert will
 5   expire on 2017-10-23. To obtain a new or tweaked version of this
 6   certificate in the future, simply run certbot again with the
 7   "certonly" option. To non-interactively renew *all* of your
 8   certificates, run "certbot renew"
 9 - Your account credentials have been saved in your Certbot
10   configuration directory at /etc/letsencrypt. You should make a
11   secure backup of this folder now. This configuration directory will
12   also contain certificates and private keys obtained by Certbot so
13   making regular backups of this folder is ideal.
14 - If you like Certbot, please consider supporting our work by:
15
16   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
17   Donating to EFF:                    https://eff.org/donate-le

您的证书被下载、安装和加载。 尝试使用https://重新加载您的网站,并注意您的浏览器的安全指标。 它应该表明该网站是正确保护的,通常用绿色锁定图标。 如果您使用 SSL Labs Server Test测试您的服务器,它将获得 A等级。

让我们通过测试更新过程来结束。

步骤 5 – 验证 Certbot 自动更新

Let's Encrypt 的证书仅有效 90 天,这是为了鼓励用户自动化其证书更新过程,我们安装的certbot包为我们负责,每天通过 systemd 计时器运行certbot renew 两次,在非 systemd 发行版中,此功能由放置在 `/etc/cron.d 中的脚本提供。

要测试更新过程,您可以使用certbot进行干跑:

1sudo certbot renew --dry-run

如果你看不到任何错误,你都已经设置了。当需要时,Certbot会更新你的证书并重新加载 Nginx 来接收更改。如果自动更新过程有时失败,Let’s Encrypt 会向你指定的电子邮件发送消息,提醒你你的证书即将到期。

结论

在本教程中,您安装了 Let’s Encrypt 客户端certbot,下载了您的域的 SSL 证书,配置了 Nginx 以使用这些证书,并设置了自动证书更新。

Published At
Categories with 技术
comments powered by Disqus