前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Debian 9上使用Let加密来保护Nginx

如何在Debian 9上使用Let加密来保护Nginx

原创
作者头像
无敌小笼包
修改2018-11-05 17:53:46
1K0
修改2018-11-05 17:53:46
举报

介绍

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

在本教程中,您将使用Certbot在Debian 9上获取Nginx的免费SSL证书,并将证书设置为自动续订。

本教程将使用单独的Nginx服务器块文件而不是默认文件。我们建议为每个域创建新的Nginx服务器块文件,因为它有助于避免常见错误并将默认文件维护为回退配置。

准备

要学习本教程,您需要:

  • 一个Debian 9服务器,遵循Debian 9教程的初始服务器设置。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器
  • 一个具有sudo权限的非root用户。
  • 启用防火墙。如果您使用的是腾讯云的CVM服务器,您可以直接在腾讯云控制台中的安全组进行设置。
  • 完全注册的域名。本教程将始终使用example.com如果您没有域名,建议您先去这里注册一个域名,您需要将域名解析到您的服务器,您可以使用腾讯云云解析进行快速设置。
  • 为您的服务器设置了以下两个DNS记录。
    • example.com指向服务器的公共IP地址的A记录。
    • www.example.com指向服务器的公共IP地址的A记录。
  • 通过以下如何在Debian 9上安装Nginx来安装Nginx。确保您的域名具有服务器块。本教程将/etc/nginx/sites-available/example.com用作示例。

第1步 - 安装Certbot

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

Certbot处于非常活跃的开发阶段,因此Debian提供的Certbot软件包与当前的稳定版本相比已经过时了。但是,我们可以通过启用/etc/apt/sources.list中的Debian 9 backports存储库来获取更新的包,apt包管理器在其中查找包源。backports存储库包括重新编译的包,可以在稳定的Debian发行版上运行而无需新库。

要添加backports存储库,请先打开/etc/apt/sources.list

代码语言:javascript
复制
sudo nano /etc/apt/sources.list

在文件的底部,添加Debian项目中的以下镜像:

代码语言:javascript
复制
...
deb http://deb.debian.org/debian stretch-backports main contrib non-free
deb-src http://deb.debian.org/debian stretch-backports main contrib non-free

这包括main包,这是Debian自由软件指导方针(DFSG) -兼容的,还有non-freecontrib组件,它们要么不符合DFSG-自己或包括这一类的依赖。

完成后保存并关闭文件。

更新包列表以获取新存储库的包信息:

代码语言:javascript
复制
sudo apt update

最后,用apt安装Certbot的Nginx包:

代码语言:javascript
复制
sudo apt install python-certbot-nginx -t stretch-backports

Certbot现在可以使用了,但是为了让它为Nginx配置SSL,我们需要验证一些Nginx的配置。

第2步 - 确认Nginx的配置

Certbot需要能够在您的Nginx配置中找到正确的server块,以便能够自动配置SSL。具体来说,它通过查找与您请求的域匹配的server_name指令来完成此操作。

如果您按照Nginx安装教程中的服务器块设置步骤进行操作,则应该在/etc/nginx/sites-available/example.com``server_name中为您的域设置一个服务器块,并且该指令已经正确设置。

要检查,请使用nano或您喜欢的文本编辑器打开域的服务器块文件:

代码语言:javascript
复制
sudo nano /etc/nginx/sites-available/example.com

找到现有的server_name行。它应该如下所示:

代码语言:javascript
复制
...
server_name example.com www.example.com;
...

如果是,请退出编辑器并继续下一步。

如果没有,请更新它以匹配。然后保存文件,退出编辑器,并验证配置编辑的语法:

代码语言:javascript
复制
sudo nginx -t

如果出现错误,请重新打开服务器阻止文件并检查是否存在拼写错误或缺少字符。配置文件语法正确后,重新加载Nginx以加载新配置:

代码语言:javascript
复制
sudo systemctl reload nginx

Certbot现在可以找到正确的server块并进行更新。

接下来,让我们更新防火墙以允许HTTPS流量。

第3步 - 通过防火墙允许HTTPS

如果启用了ufw防火墙,请按照准备中的建议启用防火墙,您需要调整设置以允许HTTPS流量。

您可以键入以下内容来查看当前设置:

代码语言:javascript
复制
sudo ufw status

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

代码语言:javascript
复制
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配置文件容量:

代码语言:javascript
复制
sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'

您的状态现在应如下所示:

代码语言:javascript
复制
sudo ufw status
代码语言:javascript
复制
Status: 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并在必要时重新加载配置。要使用此插件,请键入以下内容:

代码语言:javascript
复制
sudo certbot --nginx -d example.com -d www.example.com

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

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

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

代码语言:javascript
复制
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将结束一条消息,告诉您进程是否成功以及您的证书存储位置:

代码语言:javascript
复制
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your cert will expire on 2018-07-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级。

让我们通过测试更新过程来完成。

第5步 - 验证Certbot自动续订

我们的加密证书只有90天有效。这是为了鼓励用户自动执行证书续订过程。我们安装的certbot软件包通过添加更新脚本到/etc/cron.d来为我们解决这个问题。此脚本每天运行两次,并将自动续订到期后30天内的任何证书。

要测试更新过程,您可以用certbot执行以下操作:

代码语言:javascript
复制
sudo certbot renew --dry-run

如果您没有看到任何错误,那么您已经完成了设置。必要时,Certbot将续订您的证书并重新加载Nginx以获取更改。如果自动续订过程失败,我们的加密将向您指定的电子邮件发送一条消息,并在您的证书即将过期时发出警告。

结论

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

想要了解更多关于使用Let加密来保护Nginx的相关教程,请前往腾讯云+社区学习更多知识。


参考文献:《How To Secure Nginx with Let's Encrypt on Debian 9》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 准备
  • 第1步 - 安装Certbot
  • 第2步 - 确认Nginx的配置
  • 第3步 - 通过防火墙允许HTTPS
  • 第4步 - 获取SSL证书
  • 第5步 - 验证Certbot自动续订
  • 结论
相关产品与服务
SSL 证书
腾讯云 SSL 证书(SSL Certificates)为您提供 SSL 证书的申请、管理、部署等服务,为您提供一站式 HTTPS 解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档