介绍
让我们加密是一个证书颁发机构(CA),它提供了一个简单的方法来获取和安装免费的TLS / SSL证书 ,从而启用Web服务器上的加密HTTPS。 它通过提供一个软件客户端Certbot来简化这个过程,该客户端试图自动化大多数(如果不是全部的话)所需的步骤。 目前,获取和安装证书的整个过程在Apache和Nginx上都是完全自动的。
在本教程中,您将使用Certbot在Ubuntu 16.04上为Nginx获得一个免费的SSL证书,并将您的证书设置为自动更新。
本教程将使用一个单独的Nginx服务器块文件,而不是默认文件。 我们建议为每个域创建新的Nginx服务器块文件,因为它有助于避免一些常见的错误,并将默认文件保留为预期的后备配置。 如果你想使用默认的服务器块设置SSL,你可以按照这个Nginx + Let's Encrypt教程来代替。
先决条件
要学习本教程,您将需要:
一个Ubuntu 16.04服务器是按照Ubuntu 16.04教程的初始服务器设置设置的 ,其中包括一个sudo非root用户和一个防火墙。
完全注册的域名。 本教程将始终使用
example.com
。 您可以在Namecheap上购买域名,在Freenom上免费获取域名,或使用您所选择的域名注册商。以下两个DNS记录都是为您的服务器设置的。 你可以按照这个主机名教程了解如何添加它们的细节。
-
example.com
指向您服务器的公有IP地址的记录。 - 与
www. example.com
的一条记录www. example.com
www. example.com
指向您的服务器的公共IP地址。
-
Nginx的安装如下在Ubuntu 16.04上安装Nginx 。
一个单独的Nginx服务器块文件为您的域,按照这个Nginx服务器块教程为Ubuntu 16.04设置 。 本教程将使用
/etc/nginx/sites-available/ example.com
。
第1步 - 安装Certbot
使用Let's Encrypt获取SSL证书的第一步是在您的服务器上安装Certbot软件。
Certbot正处于非常活跃的发展阶段,因此Ubuntu提供的Certbot软件包往往已经过时。 但是,Certbot开发人员使用最新版本维护一个Ubuntu软件存储库,所以我们将使用该存储库。
首先,添加存储库。
sudo add-apt-repository ppa:certbot/certbot
您将需要按ENTER
接受。 然后,更新软件包列表以获取新的软件包信息。
sudo apt-get update
最后,用apt-get
安装Certbot的Nginx包。
sudo apt-get install python-certbot-nginx
Certbot现在已经可以使用了,但是为了让它为Nginx配置SSL,我们需要验证一些Nginx的配置。
第2步 - 确认Nginx的配置
Certbot需要能够在Nginx配置中找到正确的server
模块,以便能够自动配置SSL。 具体来说,它通过查找与您请求证书的域相匹配的server_name
指令来执行此操作。
如果您遵循了Nginx服务器模块上的先决条件教程,那么您应该在/etc/nginx/sites-available/ example.com
上为您的域设置一个服务器模块,并且server_name
指令已经正确设置。
要检查,使用nano
或您最喜爱的文本编辑器打开您的域的服务器块文件。
sudo nano /etc/nginx/sites-available/example.com
找到现有的server_name
行。 它应该是这样的:
. . .
server_name example.com www.example.com;
. . .
如果是这样,您可以退出编辑器并继续下一步。
如果没有,更新它匹配。 然后保存文件,退出编辑器,并验证配置编辑的语法。
sudo nginx -t
如果出现错误,请重新打开服务器块文件并检查是否有错别字或缺少字符。 一旦你的配置文件的语法正确,重新加载Nginx加载新的配置。
sudo systemctl reload nginx
Certbot现在可以找到正确的server
块并更新它。
接下来,我们将更新我们的防火墙以允许HTTPS流量。
第3步 - 通过防火墙允许HTTPS
如果启用了ufw
防火墙(如先决条件指南所建议的那样),则需要调整设置以允许HTTPS通信。 幸运的是,Nginx在安装时会用ufw
注册一些配置文件。
您可以输入以下内容来查看当前设置:
sudo ufw status
它可能看起来像这样,这意味着只有HTTP通信被允许到Web服务器:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
要额外地允许HTTPS流量,我们可以允许Nginx Full配置文件,然后删除冗余的Nginx HTTP配置文件配额:
sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'
现在你的状态应该是这样的:
sudo ufw status
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
我们现在准备运行Certbot并获取我们的证书。
第4步 - 获得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实验室服务器测试来测试您的服务器,则将获得A级。
让我们通过测试更新过程来完成。
第5步 - 验证Certbot自动更新
让我们加密的证书只有九十天有效。 这是为了鼓励用户自动化他们的证书更新过程。 我们安装的certbot
软件包通过给/etc/cron.d
添加一个更新脚本来处理这个问题。 该脚本每天运行两次,并将自动更新在到期后三十天内的任何证书。
要测试更新过程,您可以使用certbot
进行干运行:
sudo certbot renew --dry-run
如果你没有看到任何错误,那么你就全都设置好了 必要时,Certbot将更新您的证书并重新加载Nginx以获取更改。 如果自动更新过程失败,Let's Encrypt将向您指定的电子邮件发送一条消息,并在您的证书即将到期时向您发出警告。
结论
在本教程中,您安装了Let's Encrypt客户端certbot
,为您的域下载了SSL证书,配置了Nginx以使用这些证书,并设置了自动证书更新。 如果您对使用Certbot有进一步的问题, 他们的文档是一个很好的开始。