当前位置: 首页 > article >正文

如何在 Ubuntu 18.04 上使用 Let‘s Encrypt 保护 Apache

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

简介

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

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

本教程使用单独的 Apache 虚拟主机文件来设置将由 Let’s Encrypt 保护的网站,而不是使用默认的配置文件。我们建议为服务器中托管的每个域创建新的 Apache 虚拟主机文件,因为这有助于避免常见的错误,并将默认文件保留为备用设置。

先决条件

要完成本教程,您需要:

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

  • 一个完全注册的域名。本教程将在整个过程中使用 your_domain 作为示例。您可以在 Namecheap 购买域名,在 Freenom 免费获取一个,或者使用您选择的域名注册商。

  • 为您的服务器设置了以下两个 DNS 记录。您可以参考 DigitalOcean DNS 介绍 中的详细信息来添加它们。

    • 一个 A 记录,将 your_domain 指向您服务器的公共 IP 地址。
    • 一个 A 记录,将 www.your_domain 指向您服务器的公共 IP 地址。
  • 通过按照 如何在 Ubuntu 18.04 上安装 Apache 进行安装的 Apache。确保您为您的域名有一个虚拟主机文件。本教程将使用 /etc/apache2/sites-available/your_domain.conf 作为示例。

步骤 1 — 安装 Certbot

要使用 Let’s Encrypt 获取 SSL 证书,您需要在服务器上安装 Certbot 软件。在本教程中,我们将使用默认的 Ubuntu 软件包存储库来安装 Certbot。

运行以下命令,它将安装两个软件包:certbotpython3-certbot-apache。后者是一个插件,将 Certbot 与 Apache 集成,以便可以使用单个命令自动获取证书并在您的 Web 服务器中配置 HTTPS:

sudo apt install certbot python3-certbot-apache

确认安装,按 Y 然后按 ENTER 接受。

Certbot 现在已安装在您的服务器上。接下来,您将验证 Apache 的配置,以确保您的虚拟主机设置正确。这样可以确保 certbot 客户端脚本能够检测到您的域,并自动重新配置您的 Web 服务器以使用新生成的 SSL 证书。

步骤 2 — 检查您的 Apache 虚拟主机配置

要自动获取和配置您的 Web 服务器的 SSL,Certbot 需要能够在您的 Apache 配置文件中找到正确的虚拟主机。您的服务器域名将从 VirtualHost 配置块中定义的 ServerNameServerAlias 指令中检索。

如果您在 Apache 安装教程中遵循了虚拟主机设置步骤,您应该在 /etc/apache2/sites-available/your_domain.conf 中有一个用于您的域的 VirtualHost 块,并且 ServerName 指令已经适当设置。

要检查,请使用 nano 或您喜欢的文本编辑器打开您域的虚拟主机文件:

sudo nano /etc/apache2/sites-available/your_domain.conf

找到现有的 ServerNameServerAlias 行:

...
ServerName your_domain;
SeverAlias www.your_domain
...

如果您的 ServerNameServerAlias 已经设置好,那么您可以退出文本编辑器并继续下一步。如果您使用的是 nano,您可以按 CTRL + X 然后按 YENTER 来完成。

如果您当前的虚拟主机配置不匹配,那么请相应地进行更新。然后保存并退出文本编辑器。然后,验证您的更改:

sudo apache2ctl configtest

如果您的虚拟主机文件的语法没有任何错误,您将收到 Syntax OK 响应。如果收到错误,请重新打开虚拟主机文件并检查是否有任何拼写错误或缺少字符。一旦您的配置文件的语法正确,重新加载 Apache 以加载新的配置:

sudo systemctl reload apache2

这些更改生效后,Certbot 将能够找到正确的 VirtualHost 块并更新它。

接下来,您将更新防火墙以允许 HTTPS 流量。

第三步 — 允许防火墙通过 HTTPS 流量

如果您已经按照先决条件指南中的建议启用了 UFW 防火墙,您需要调整设置以允许 HTTPS 流量。Apache 注册了一些 UFW 应用程序配置文件,您可以利用 Apache Full 配置文件来允许服务器上的 HTTP 和 HTTPS 流量。

通过运行以下命令来验证当前在服务器上允许的流量类型:

sudo ufw status

如果您遵循了我们的 Apache 安装指南之一,您的输出将生成以下内容,这意味着只允许端口 80 上的 HTTP 流量:

状态:active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Apache                     ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Apache (v6)                ALLOW       Anywhere (v6)

要额外允许 HTTPS 流量,请允许 Apache Full 配置文件:

sudo ufw allow 'Apache Full'

然后,删除多余的 Apache 配置文件允许:

sudo ufw delete allow 'Apache'

再次检查状态:

sudo ufw status

您应该收到以下输出:

状态:active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Apache Full                ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Apache Full (v6)           ALLOW       Anywhere (v6)        

现在,您已经准备好运行 Certbot 并获取您的证书。

第四步 — 获取 SSL 证书

Certbot 提供了多种通过插件获取 SSL 证书的方式。Apache 插件将负责在必要时重新配置 Apache 并重新加载配置。要使用此插件,请运行以下命令:

sudo certbot --apache

此命令将生成一个提示,要求您回答一系列问题以配置您的 SSL 证书。首先,您将被要求提供有效的电子邮件地址,这是用于更新通知和安全通知的:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): you@your_domain

在提供有效的电子邮件地址后,按 ENTER 并继续下一步。您将被要求确认是否同意 Let’s Encrypt 的服务条款。通过按 AENTER 来确认:

Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

接下来,您将被问及是否愿意与电子前哨基金会共享您的电子邮件地址以接收新闻和其他信息。如果您不想订阅,请按 N,否则按 Y 然后按 ENTER 继续下一步:

Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N

提示将告知 Certbot 您要为哪些域名激活 HTTPS。域名列表将自动从您的 Apache 虚拟主机配置中获取。这就是为什么确认您在虚拟主机中配置了正确的 ServerNameServerAlias 设置很重要。如果您想为所有列出的域名启用 HTTPS(推荐),请将提示留空并按 ENTER 继续。否则,通过列出每个适当的数字,用逗号和/或空格分隔,选择要为其启用 HTTPS 的域名:

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - -

## 第五步 — 验证 Certbot 自动续订

Let's Encrypt 证书仅有效期为九十天。这是为了鼓励用户自动化证书续订流程,并确保被滥用的证书或被盗的密钥会尽快过期。

你安装的 `certbot` 软件包通过在 `/etc/cron.d` 中包含一个续订脚本来处理续订,该脚本由一个名为 `certbot.timer` 的 `systemctl` 服务管理。该脚本每天运行两次,并将自动续订任何在到期前三十天内的证书。

检查该服务的状态,并确保它是激活并正在运行的:

```command
sudo systemctl status certbot.timer

你将会收到类似以下的输出:

● certbot.timer - Run certbot twice daily
   Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: en
   Active: active (waiting) since Tue 2021-12-07 20:04:42 UTC; 1h 45min ago
  Trigger: Wed 2021-12-08 11:22:45 UTC; 13h left

Dec 07 20:04:42 encrypt systemd[1]: Started Run certbot twice daily.

通过使用 certbot 进行干运行来测试续订流程:

sudo certbot renew --dry-run

如果没有收到错误,那么一切都设置好了。在必要时,Certbot 将会续订你的证书并重新加载 Apache 以应用更改。如果自动续订流程失败,Let’s Encrypt 将会发送一封消息到你指定的邮箱,警告你的证书即将过期。

结论

在本教程中,你安装了 Let’s Encrypt 客户端 certbot,为你的域配置并安装了 SSL 证书,并确认了 Certbot 的自动证书续订服务在 systemctl 中是激活的。如果你对使用 Certbot 有进一步的问题,他们的文档是一个很好的起点。


http://www.kler.cn/news/365400.html

相关文章:

  • 【云原生】Kubernets1.29部署StorageClass-NFS作为存储类,动态创建pvc(已存在NFS服务端)
  • django5入门【03】新建一个hello界面
  • 机器学习——元学习(Meta-learning)
  • 【NPM】工程化依赖包/库开发 之 常见开发结构/模式及特点
  • Erric Gamma 关于resuable code的采访
  • 初学者指南:软件测试
  • 挖矿病毒的处理
  • 用STM32硬件思维学JAVA--23种设计模式
  • 分布式解决方案---分布式ID
  • 自动化测试工具Appium介绍
  • Java基础选择题
  • win10 opencv gpu c++版本编译教程
  • HarmonyOS 5.0应用开发——Navigation实现页面路由
  • 全方面熟悉Maven项目管理工具(一)认识Maven、Maven如何安装?
  • 使用Angular构建动态Web应用
  • 怎么看AI大模型(LLM)、智能体(Agent)、知识库、向量数据库、知识图谱,RAG,AGI 的不同形态?
  • 使用WPF写一个简单的开关控件
  • 小程序无法获取头像昵称以及手机号码的深度剖析与解决方案
  • 【Fargo】15: 使用mediasoup的UdpSocket发送数据
  • ubuntu20.04上使用 Verdaccio 搭建 npm 私有仓库
  • http 请求返回307
  • UI管理器的使用
  • SVN(Subversion)的介绍和使用
  • 在 Excel 中的单元格内开始一行新文本
  • idea项目搭建的四种方式: 一(以idea2017为例)
  • WPF中的ContentPresenter、ItemsPresenter、ScrollContentPresenter