如何在Ubuntu14.04上使用Let'sEncrypt保护Nginx

来自菜鸟教程
跳转至:导航、​搜索

介绍

Let's Encrypt 是一个新的证书颁发机构 (CA),它提供了一种简单的方法来获取和安装免费的 TLS/SSL 证书,从而在 Web 服务器上启用加密的 HTTPS。 它通过提供软件客户端 Certbot 来简化流程,该客户端尝试自动化大部分(如果不是全部)所需步骤。 目前,获取和安装证书的整个过程在 Apache 和 Nginx Web 服务器上都是完全自动化的。

在本教程中,我们将向您展示如何使用 Certbot 获取免费的 SSL 证书,并在 Ubuntu 14.04 LTS 上将其与 Nginx 一起使用。 我们还将向您展示如何自动更新您的 SSL 证书。

我们将在本教程中使用默认的 Nginx 配置文件,而不是单独的服务器块文件。 我们建议为每个域创建新的 Nginx 服务器块文件,因为它有助于避免一些常见错误,并按预期将默认文件作为后备配置维护。 如果你想使用服务器块来设置 SSL,你可以按照 这个 Nginx 服务器块和 Let's Encrypt 教程

先决条件

在学习本教程之前,您需要做一些事情。

  • 具有 sudo 权限的非 root 用户的 Ubuntu 14.04 服务器。 您可以按照我们的 Ubuntu 14.04 初始服务器设置教程 学习如何设置此类用户帐户。
  • Nginx 已安装,如何在 Ubuntu 14.04 LTS 上安装 Nginx
  • 您必须拥有或控制您希望使用证书的注册域名。 如果您还没有注册域名,您可以在众多域名注册商之一注册一个(例如 Namecheap、GoDaddy 等)。
  • DNS A 记录 将您的域指向您服务器的公共 IP 地址。 您可以关注 this hostname tutorial 了解如何添加它们的详细信息。 这是必需的,因为 Let's Encrypt 如何验证您是否拥有它为其颁发证书的域。 例如,如果您想获得 example.com 的证书,则该域必须解析到您的服务器,验证过程才能正常工作。 我们的设置将使用 example.comwww.example.com 作为域名,因此需要 两个 DNS 记录

完成所有先决条件后,让我们继续安装 Certbot,即 Let's Encrypt 客户端软件。

第 1 步 — 安装 Certbot

使用 Let's Encrypt 获取 SSL 证书的第一步是在您的服务器上安装 certbot 软件。 Certbot 开发人员使用最新版本的软件维护自己的 Ubuntu 软件存储库。 由于 Certbot 处于如此积极的开发中,因此值得使用此存储库来安装比 Ubuntu 提供的更新的 Certbot。

首先,添加存储库:

sudo add-apt-repository ppa:certbot/certbot

您需要按 ENTER 接受。 之后,更新包列表以获取新存储库的包信息:

sudo apt-get update

最后,使用 apt-get 安装 Certbot:

sudo apt-get install python-certbot-nginx

certbot Let's Encrypt 客户端现在可以使用了。

第 2 步 — 设置 Nginx

Certbot 可以为 Nginx 自动配置 SSL,但它需要能够在您的配置中找到正确的 server 块。 它通过查找与您请求证书的域匹配的 server_name 指令来做到这一点。 如果您刚开始安装 Nginx,您可以更新默认配置文件:

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

找到现有的 server_name 行:

/etc/nginx/sites-available/default

server_name localhost;

localhost 替换为您的域名:

/etc/nginx/sites-available/default

server_name example.com www.example.com;

保存文件并退出编辑器。 使用以下命令验证配置编辑的语法:

sudo nginx -t

如果运行没有错误,请重新加载 Nginx 以加载新配置:

sudo service nginx reload

Certbot 现在将能够找到正确的 server 块并对其进行更新。 现在我们将更新防火墙以允许 HTTPS 流量。

第 3 步 — 获取 SSL 证书

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

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

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

如果这是您第一次运行 certbot,系统将提示您输入电子邮件地址并同意服务条款。 完成此操作后,certbot 将与 Let's Encrypt 服务器通信,然后运行质询以验证您是否控制了要为其请求证书的域。

如果成功,certbot 将询问您希望如何配置 HTTPS 设置:

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

选择您的选择,然后点击 ENTER。 配置将被更新,Nginx 将重新加载以获取新设置。 certbot 将以一条消息结束,告诉您该过程已成功以及您的证书存储在哪里:

OutputIMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/example.com/fullchain.pem. Your cert will
   expire on 2017-10-23. To obtain a new or tweaked version of this
   certificate in the future, simply run certbot again with the
   "certonly" option. To non-interactively renew *all* of your
   certificates, run "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

您的证书现已下载、安装和配置。 尝试使用 https:// 重新加载您的网站,并注意浏览器的安全指示器。 它应该表示该站点已得到适当保护,通常带有绿色锁定图标。 如果您使用 SSL Labs Server Test 测试您的服务器,它将获得 A 等级。

第 4 步 — 验证 Certbot 自动续订

Let's Encrypt 的证书有效期只有九十天。 这是为了鼓励用户自动化他们的证书更新过程。 我们安装的 certbot 软件包通过 systemd 计时器每天运行两次“certbot renew”来为我们解决这个问题。 在非系统发行版上,此功能由放置在 /etc/cron.d 中的脚本提供。 此任务每天运行两次,并将续订到期后三十天内的任何证书。

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

sudo certbot renew --dry-run

如果您没有看到任何错误,则说明一切就绪。 必要时,Certbot 将更新您的证书并重新加载 Nginx 以获取更改。 如果自动续订过程失败,Let's Encrypt 将向您指定的电子邮件发送一条消息,在您的证书即将到期时警告您。

结论

在本教程中,我们安装了 Let's Encrypt 客户端 certbot,为我们的域下载 SSL 证书,配置 Nginx 以使用这些证书,并设置自动证书更新。 如果您对使用 Certbot 有其他疑问, 他们的文档 是一个很好的起点。