当前位置: 首页 > 科技观察

如何在 Ubuntu 20.04 上使用 Let's Encrypt 保护 Nginx

时间:2023-03-15 11:22:31 科技观察

如何在Ubuntu20.04上使用Let'sEncrypt保护Nginx在Web服务器上启用加密HTTPS。它通过提供软件客户端Certbot来简化流程,该软件客户端尝试自动执行大部分(如果不是全部)所需步骤。目前,获取和安装证书的整个过程在Apache和Nginx上都是完全自动化的。在本教程中,您将使用Certbot为Ubuntu20.04上的Nginx获取免费的SSL证书,并将您的证书设置为自动续订。本教程将使用单独的Nginx服务器配置文件而不是默认配置文件。我们建议为每个域创建新的Nginx服务器块文件,因为它有助于避免常见错误并维护默认文件作为后备配置。先决条件要学习本教程,您需要:Ubuntu20.04服务器设置,包括启用sudo的非根用户和防火墙。注册域名。本教程始终使用example.com。下面为你的服务器设置两条DNS记录。example.com的A记录指向您服务器的公共IP地址。指向您服务器的公共IP地址的A记录。www.example.com按照如何在Ubuntu20.04上安装Nginx安装Nginx。确保您的域有一个服务器块。本教程将用作示例。/etc/nginx/sites-available/example.com第1步-安装Certbot使用Let'sEncrypt获取SSL证书的第一步是在您的服务器上安装Certbot软件。安装Certbot及其Nginx插件apt:sudoaptinstallcertbotpython3-certbot-nginxCertbot现在可以使用了,但是为了让它自动为Nginx配置SSL,我们需要验证Nginx的一些配置。第2步—确认Nginx配置Certbot需要能够在您的Nginx配置中找到正确的块,以便服务器自动配置SSL。具体来说,它通过查找其server_name与您为其请求证书的域相匹配的指令来执行此操作。如果您按照Nginx安装教程中的服务器块设置步骤进行操作,则您的域中应该有一个服务器块,并且指令设置正确。/etc/nginx/sites-available/example.comserver_name要检查,请使用nano或您喜欢的文本编辑器打开域的配置文件:sudonano/etc/nginx/sites-available/example.com找到现有的Theserver_name行。它应该看起来像这样:/etc/nginx/sites-available/example.com...server_nameexample.comwww.example.com;...如果是,退出编辑器并继续下一步。如果不是,请更新它以匹配。然后保存文件,退出编辑器,并验证配置编辑的语法:sudonginx-t如果出现错误,请重新打开服务器块文件并检查是否有错别字或缺失字符。一旦配置文件的语法正确,重新加载Nginx以加载新配置:sudosystemctlreloadnginxCertbot现在可以找到正确的服务器块并自动更新它。接下来,让我们更新防火墙以允许HTTPS流量。第3步—允许HTTPS通过防火墙如果您的ufw按照先决条件指南的建议启用了防火墙,您将需要调整设置以允许HTTPS流量。幸运的是,Nginxufw在安装时注册了一些配置文件。您可以通过键入以下内容查看当前设置:sudoufwstatus它可能看起来像这样,这意味着Web服务器仅允许HTTP流量:Status:activeToActionFrom------------OpenSSHALLOWAnywhereNginxHTTPALLOWAnywhereOpenSSH(v6)ALLOWAnywhere(v6)NginxHTTP(v6)ALLOWAnywhere(v6)要额外允许HTTPS流量,允许Nginx完整配置文件并删除多余的NginxHTTP配置文件限额:sudoufwallow'NginxFull'sudoufwdeleteallow'NginxHTTP'you状态现在应该看起来像this:sudoufwstatusStatus:activeToActionFrom------------OpenSSHALLOWAnywhereNginxFullALLOWAnywhereOpenSSH(v6)ALLOWAnywhere(v6)NginxFull(v6)ALLOWAnywhere(v6)接下来,让我们运行Certbot并获取我们的证书。第4步-获取SSL证书Certbot提供了几种通过插件获取SSL证书的方法。Nginx插件将负责重新配置Nginx并在必要时重新加载配置。要使用此插件,请键入以下内容:sudocertbot--nginx-dexample.com-dwww.example.com此certbot与--nginx插件一起运行,-d用于指定我们想要证书的域名适用于。如果这是您第一次运行certbot,系统将提示您输入您的电子邮件地址并同意服务条款。执行此操作后,certbot将与Let'sEncrypt服务器通信,然后运行质询以验证您是否控制您为其请求证书的域。如果成功,certbot将询问您希望如何配置HTTPS设置。请选择是否将HTTP流量重定向到HTTPS,从而删除HTTP访问。----------------------------------------1:Noredirect-MakenofurtherchangestoWeb服务器配置。2:Redirect-MakeallrequestsredirecttosecureHTTPSaccess。为新闻网站选择这个,或者如果你有信心你的网站在HTTPS上工作。你可以通过编辑你的网络服务器的配置来撤销这个改变。-----------------------------------------选择合适的数字[1-2]然后[输入](按'c'取消):选择您的选择并按ENTER。配置将被更新,Nginx将重新加载以获取新设置。certbot将以一条消息结束,告诉您该过程已成功以及您的证书存储位置:重要提示:-恭喜!Yourcertificateandchainhavebeensavedat:/etc/letsencrypt/live/example.com/fullchain.pemYourkeyfilehasbeensavedat:/etc/letsencrypt/live/example.com/privkey.pemYourcert将在2020-08-18到期。要在将来获得此证书的新版本或弱化版本,只需使用“certonly”选项再次运行certbot。Tonon交互式续订*所有*您的证书,运行“certbotrenew”-如果您喜欢Certbot,请考虑支持我们的工作:捐赠给ISRG/Let'sEncrypt.org/letsencrypt:https://letsencryptdonateDonatingtoEFF:https://eff.org/donate-le您的证书已下载、安装和加载。尝试使用https://重新加载您的网站并注意浏览器的安全指示器。它应该表明该站点已得到妥善保护,通常带有锁图标。如果您使用SSLLabsServerTest测试您的服务器,它将获得A等级。让我们以测试更新过程结束。第5步-验证Certbot是否仅自动续订Let'sEncrypt证书90天。这是为了鼓励用户自动化他们的证书更新过程。我们安装的certbot包通过添加一个每天运行两次的systemd计时器来为我们处理这个问题,并在到期后的三十天内自动更新任何证书。您可以使用systemctl查询计时器的状态:sudosystemctlstatuscertbot.timercertbot.timer-RuncertbotwicedailyLoaded:loaded(/lib/systemd/system/certbot.timer;enabled;vendorpreset:enabled)Active:active(waiting)sinceMon2020-05-0420:04:36UTC;2weeks1daysagoTrigger:Thu2020-05-2105:22:32UTC;9hleftTriggers:certbot.service要测试更新过程,您可以使用以下命令试运行certbot:sudocertbotrenew--dry-runIf你没有看到任何错误,你已经准备好了。必要时,Certbot将更新您的证书并重新加载Nginx以获取更改。如果自动续订过程失败,Let'sEncrypt将向您指定的电子邮件地址发送一条消息,在您的证书即将过期时警告您。结论在本教程中,您安装了Let'sEncrypt客户端certbot,为您的域下载了SSL证书,将Nginx配置为使用它们,并设置了自动证书续订。如果您对使用Certbot有更多疑问,可以从官方文档入手。