Ubuntu16.04上部署Nginx + Let‘s Encrypt SSL证书教程
引言
Let's Encrypt
是一个证书颁发机构(CA),它提供了一种获取和安装免费TLS / SSL证书的简单方法,从而在Web服务器上启用加密的HTTPS。通过 Certbot 软件,几步操作就可以全自动部署,目前,获取和安装证书的整个过程在Apache和Nginx上都是完全自动的。
在本教程中,您将使用Certbot为Ubuntu 16.04上的Nginx获得一个免费的SSL证书,并将您的证书设置为自动更新。
本教程使用默认的Nginx配置文件,而不是单独的服务器块文件
建议
为每个域创建新的Nginx服务器块文件,因为它有助于避免一些常见错误,并将默认文件保留为预期的后备配置,如果您想使用服务器模块来设置SSL,则可以使用Let's Encrypt教程来关注此Nginx服务器模块。
环境准备
要学习本教程,您需要:
- 遵循Ubuntu 16.04初始服务器设置的一个Ubuntu 16.04服务器,包括sudo非root用户和防火墙。
- 完全注册的域名。本教程将始终使用
example.com
。您可以在Namecheap上购买域名,在Freenom上免费购买域名,或者使用者选择的域名注册商。 - 为您的服务器设置了以下两个DNS记录。你可以按照这个主机名教程来获取如何添加它们的细节
- 带有
example.com
的A记录指向您的服务器的公共IP地址。 - 带有
www.example.com
的A记录指向您的服务器的公共IP地址。
- 带有
- Nginx的安装方法如下:在Ubuntu 16.04上安装Nginx。
开始安装
第一步:安装 Certbot
使用Let's Encrypt获取SSL证书的第一步是在服务器上安装Certbot软件。
Certbot处于非常活跃的发展阶段,因此Ubuntu提供的Certbot软件包往往过时。但是,Certbot开发人员使用最新版本维护Ubuntu软件存储库,因此我们将使用该存储库。
首先,添加存储库。
sudo add-apt-repository ppa:certbot/certbot
接着按回车键,然后,更新软件包列表以获取新存储库的软件包信息。
sudo apt-get update
最后,用apt-get安装Certbot的Nginx包。
sudo apt-get install python-certbot-nginx
Certbot现在可以使用了,但为了让它为Nginx配置SSL,我们需要验证一些Nginx的配置。
第二步:配置 Nginx
Certbot可以自动为Nginx配置SSL,但它需要能够在您的配置中找到正确的服务器块。 它通过查找与您请求证书的域相匹配的server_name指令来完成此操作。
如果您刚开始使用新的Nginx安装,则可以更新默认配置文件。 用nano或你最喜欢的文本编辑器打开它。
sudo nano /etc/nginx/sites-available/default
找到现有的server_name行,并将下划线_替换为您的域名:
# vi /etc/nginx/sites-available/default
server_name example.com www.example.com;
保存该文件并退出编辑器
然后,验证您的配置
sudo nginx -t
如果出现任何错误,请重新打开文件并检查拼写错误,然后再次进行测试。
一旦你的配置语法正确,重新加载Nginx来加载新的配置。
sudo systemctl reload nginx
Certbot现在将能够找到正确的服务器模块并进行更新。接下来,我们将更新我们的防火墙以允许HTTPS流量。
第三步:防火墙允许 HTTPS
如果您已按照先决条件指南的建议启用ufw防火墙,则需要调整设置以允许HTTPS流量。幸运的是,Nginx在安装时会使用ufw注册一些配置文件。
您可以通过输入以下命令查看当前的防火墙配置
sudo ufw status
它可能看起来像这样,这意味着只有HTTP流量被允许到Web服务器
Output
Status: 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
Output
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
现在准备运行Certbot并获取SSL证书
第四步:获取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设置。
Output
Please 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将收到一条消息,告诉你该过程已成功完成,并存储证书的位置:
Output
IMPORTANT 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://
重新加载您的网站,并注意您的浏览器的安全指示器。它应该表明该网站已妥善保护,通常带有一个绿色的锁定图标。验证HTTPS是否配置正常
让我们通过测试更新过程来完成。
第五步:验证Certbot自动更新证书
Let's Encrypt
证书只有九十天有效。这是为了鼓励用户自动执行证书更新流程。我们安装的certbot软件包通过systemd定时器每天运行两次'certbot renew'来为我们提供帮助。在非systemd发行版中,此功能由位于/etc/cron.d中的脚本提供。此任务每天运行两次,并将在续期30天内续订任何证书。
要测试续订过程,您可以使用certbot进行空运行:
sudo certbot renew --dry-run
如果你没有看到任何错误,那你就全都设定好了。必要时,Certbot将更新您的证书并重新加载Nginx以获取更改。如果自动更新过程失败,Let's Encrypt会向您指定的电子邮件发送一条消息,并在您的证书即将到期时向您发出警告。
结束语
在本教程中,您安装了Let's Encrypt客户端certbot,为您的域名下载了SSL证书,配置了Nginx以使用这些证书,并设置了自动证书更新。如果您对使用Certbot有进一步的问题,官方文档是一个很好的开始。