首页 > 系统相关 >如何在 Ubuntu 20.04 上使用 Let‘s Encrypt 保护 Nginx

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

时间:2024-10-31 18:50:49浏览次数:9  
标签:Encrypt 证书 Nginx Let Certbot Ubuntu 服务器 example certbot

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站

简介

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

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

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

先决条件

要按照本教程操作,您需要:

  • 通过按照 Ubuntu 20.04 初始服务器设置教程 设置的一个 Ubuntu 20.04 服务器,包括一个启用 sudo 的非 root 用户和一个防火墙。

  • 一个注册的域名。本教程将始终使用 example.com。您可以从 Namecheap 购买域名,在 Freenom 免费获取一个,或者使用您选择的域名注册商。

  • 为您的服务器设置了以下两个 DNS 记录。如果您使用的是 DigitalOcean,请参阅我们的 DNS 文档,了解如何添加这些记录。

    • 一个 A 记录,将 example.com 指向您服务器的公共 IP 地址。
    • 一个 A 记录,将 www.example.com 指向您服务器的公共 IP 地址。
  • 通过按照《在 Ubuntu 20.04 上安装 Nginx》教程安装了 Nginx。确保您为您的域设置了服务器块。本教程将以 /etc/nginx/sites-available/example.com 为例。

步骤 1 — 安装 Certbot

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

使用 apt 安装 Certbot 及其 Nginx 插件:

sudo apt install certbot python3-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 服务器:

状态: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
状态: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 设置。


请选择是否将 HTTP 流量重定向到 HTTPS,删除 HTTP 访问。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: 不重定向 - 不对 web 服务器配置进行进一步更改。
2: 重定向 - 使所有请求重定向到安全的 HTTPS 访问。对于新站点或者您确信您的站点可以使用 HTTPS,请选择此项。您可以通过编辑您的 web 服务器配置来撤消此更改。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
选择适当的数字 [1-2] 然后按 [enter] 键(按 'c' 取消):

选择您的选择然后按 ENTER 键。配置将被更新,Nginx 将重新加载以应用新的设置。certbot 将以一条消息告诉您过程成功,并告诉您证书存储在何处:


重要提示:
 - 恭喜!您的证书和链已保存在:
   /etc/letsencrypt/live/example.com/fullchain.pem
   您的密钥文件已保存在:
   /etc/letsencrypt/live/example.com/privkey.pem
   您的证书将在 2020-08-18 到期。在将来获取新的或调整过的
   版本的此证书时,只需再次运行 certbot
   使用 "certonly" 选项。要非交互式地更新 *所有*
   您的证书,请运行 "certbot renew"
 - 如果您喜欢 Certbot,请考虑通过以下方式支持我们的工作:

   向 ISRG / Let's Encrypt 捐赠:   https://letsencrypt.org/donate
   向 EFF 捐赠:                    https://eff.org/donate-le

您的证书已下载、安装和加载。尝试使用 https:// 重新加载您的网站,并注意您浏览器的安全指示器。它应该指示网站已正确安全,通常会显示一个锁图标。如果您使用 SSL Labs 服务器测试测试您的服务器,它将获得一个 A 等级。

让我们通过测试续订过程来结束。

步骤 5 — 验证 Certbot 自动续订

Let’s Encrypt 的证书只在九十天内有效。这是为了鼓励用户自动化他们的证书续订过程。我们安装的 certbot 软件包通过添加一个 systemd 定时器来为我们处理这个问题,该定时器将每天运行两次,并自动续订任何在到期前三十天内的证书。

您可以使用 systemctl 查询定时器的状态:

sudo systemctl status certbot.timer

● certbot.timer - 每天运行 certbot 两次
     Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
     Active: active (waiting) since Mon 2020-05-04 20:04:36 UTC; 2 weeks 1 days ago
    Trigger: Thu 2020-05-21 05:22:32 UTC; 9h left
   Triggers: ● certbot.service

要测试续订过程,您可以使用 certbot 进行干运行:

sudo certbot renew --dry-run

如果没有错误,您已经设置好了。在必要时,Certbot 将续订您的证书并重新加载 Nginx 以应用更改。如果自动续订过程失败,Let’s Encrypt 将向您指定的电子邮件发送一封消息,警告您您的证书即将到期。

结论

在本教程中,您安装了 Let’s Encrypt 客户端 certbot,为您的域下载了 SSL 证书,配置了 Nginx 来使用这些证书,并设置了自动证书续订。如果您对使用 Certbot 有进一步的问题,官方文档是一个很好的起点。

标签:Encrypt,证书,Nginx,Let,Certbot,Ubuntu,服务器,example,certbot
From: https://blog.csdn.net/rubys007/article/details/143277263

相关文章

  • 如何在 Ubuntu 18.04 上使用 Gunicorn 和 Nginx 提供 Flask 应用程序
    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。简介在本指南中,您将在Ubuntu18.04上使用Flask微框架构建一个Python应用程序。本文的大部分内容将介绍如何设置Gunicorn应用服务器,以及如何启动应用程序并配置Ngi......
  • Ubuntu24安装Gitlab源码管理系统
    Ubuntu20.04LTS,22.04LTS,24.04LTS安装和配置所需的依赖sudoapt-getupdatesudoapt-getinstall-ycurlopenssh-serverca-certificatestzdataperl(可选)如果要使用Postfix来发送电子邮件通知,执行以下安装命令。sudoapt-getinstall-ypostfix如果您想使用......
  • 关于AutoCompleteBox的调研笔记
    AutoCompleteBox就是输入文本时,根据当前输入的文本,自动补全。AvaloniaAvalonia平台,本身就有提供AutoCompleteBox控件,直接使用即可。https://docs.avaloniaui.net/zh-Hans/docs/reference/controls/autocompleteboxWPFWPF本身并没有提供类似的控件。所以需要寻找第三方控件。......
  • /bin/sh: ./loophole: not found alpine(ubuntu系统) 安装 loophole 无法安装
     1.查看依赖包执行命令lddloophole (如果提示commandnotfound错误,则先执行后面的2、3后,执行apkaddlibc-bin命令,之后,就可执行lddloophole了)#lddloopholelinux-vdso.so.1(0x00007ffef7db7000)libpthread.so.0=>/lib/x86_64-linux-gnu......
  • Ubuntu零基础入门到精通【2.4讲】: 虚拟机中的 Ubuntu
    目录:......
  • VM+ubuntu,编译huawei EC6109 SDK 报错"[u-boot.bin] Error 1" ,未找到原因
    环境:ubuntu14,内核3.13.0-24-generic源代码:https://kgithub.com/tegzwn/HiSTBLinuxV100R005C00SPC050编译问题如下:make-C/home/andy1224/Downloads/HiSTBLinuxV100R005C00SPC050-master/out/hi3798mv200/hi3798mv2dmg/obj/source/boot/fastboot/arch/arm/cpu/hi3798mv2x/u-......
  • ubuntu-安装docker、中间件
    1、基本命令#查看ubuntu版本lsb_release-a#修改密码sudopasswdubuntu#修改远程端口vim/etc/ssh/sshd_configsudoservicesshrestart#基础软件安装sudoaptinstalliputils-ping-ysudoaptinstallnet-tools-ysudoaptinstallvim-ysudoaptinstallufw-y 2、......
  • Servlet -个人理解笔记
    Servlet的作用        Servlet主要是为了衔接web应用的前端和后端的,作为它们俩中间数据交换的桥梁,现在很多web项目都是前后端分离的,前端写前端的后端写后端的,但是他俩所用的编程语言是有区别的,怎么实现它们之间的数据交换呢?Servlet就是为了解决这个,它是用java编写的,目......
  • DBeaver如何生成select,update,delete,insert语句
    前言我们在使用DBeaver时,经常是需要查看数据库表的。有时候,我们需要用DBeaver生成select,update,delete,insert等语句,这样可以使我们方便的开发代码,那么应该怎么生成呢?如何生成语句首先,我们点击下我们要生成语句的表,右键点击。然后,我们点击下生成SQL选项,在展开的选项中,可以选择s......
  • Ubuntu22 mysql8 MHA高可用
    mha-manager地址:https://github.com/yoshinorim/mha4mysql-managermha-node地址:https://github.com/yoshinorim/mha4mysql-node mha有mha-manager和mha-node2个组件由于主节点有可能会被切换成从节点,而每一个从节点也有可能会被切换成主节点所以MHA对Mysql复制环境有特......