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

2023-11-06

介绍

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 非 root 用户和防火墙。

  • 完全注册的域名。本教程将使用你的域名作为整个例子。您可以购买域名名称廉价,免费获得一份Freenom,或使用您选择的域名注册商。

  • 为您的服务器设置以下两条 DNS 记录。您可以关注DigitalOcean DNS 简介有关如何添加它们的详细信息。

    • An A record with your_domain pointing to your server’s public IP address.
    • An A record with www.your_domain pointing to your server’s public IP address.
  • Apache installed by following How To Install Apache on Ubuntu 18.04. Be sure that you have a virtual host file for your domain. This tutorial will use /etc/apache2/sites-available/your_domain.conf as an example.

第 1 步 — 安装 Certbot

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

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

  1. sudo apt installcertbot python3-certbot-apache

按确认安装Y进而ENTER接受。

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

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

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

If you followed the virtual host set up step in the Apache installation tutorial, you should have a VirtualHost block for your domain at /etc/apache2/sites-available/your_domain.conf with the ServerName directive already set appropriately.

要进行检查,请使用以下命令打开您的域的虚拟主机文件nano或您最喜欢的文本编辑器:

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

找到现有的ServerName and ServerAlias lines:

/etc/apache2/sites-available/your_domain.conf
...
ServerName your_domain;
SeverAlias www.your_domain
...

If your ServerName and ServerAlias已经设置完毕,那么您可以退出文本编辑器并继续下一步。如果您正在使用nano您可以通过按CTRL + X then Y and ENTER.

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

  1. sudoapache2ctl 配置测试

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

  1. sudosystemctl 重新加载 apache2

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

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

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

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

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

  1. sudoUFW 状态

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

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache (v6) ALLOW Anywhere (v6)

要另外允许 HTTPS 流量进入,请允许Apache Full轮廓:

  1. sudoUFW 允许“阿帕奇完整版”

然后删除多余的Apache轮廓余量:

  1. sudoufw 删除允许'Apache'

再次检查状态:

  1. sudoUFW 状态

您应该收到以下输出:

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache Full (v6) ALLOW Anywhere (v6)

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

第 4 步 — 获取 SSL 证书

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

  1. sudo证书机器人--apache

此命令将生成一个提示,其中包含一系列问题以配置您的 SSL 证书。首先,系统会要求您提供有效的电子邮件地址,这是为了续订通知和安全通知:

Output
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 服务条款。按确认A and ENTER:

Output
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继续下一步:

Output
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 虚拟主机配置中获取。这就是为什么确认您拥有正确的信息非常重要ServerName and ServerAlias在您的虚拟主机中配置的设置。如果您想为所有列出的域名启用 HTTPS(推荐),请将提示留空并按ENTER继续。否则,通过列出每个适当的数字(以逗号和/或空格分隔)来选择要启用 HTTPS 的域,然后按ENTER:

Output
Which names would you like to activate HTTPS for? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: your_domain 2: your_domain - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel):

您将收到以下输出:

Output
Obtaining a new certificate Performing the following challenges: http-01 challenge for your_domain http-01 challenge for your_domain Enabled Apache rewrite module Waiting for verification... Cleaning up challenges Created an SSL vhost at /etc/apache2/sites-available/your_domain-le-ssl.conf Enabled Apache socache_shmcb module Enabled Apache ssl module Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf Enabling available site: /etc/apache2/sites-available/your_domain-le-ssl.conf Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf

接下来,系统会要求您选择是否要将 HTTP 流量定向到 HTTPS。这意味着当有人通过未加密通道 (HTTP) 访问您的网站时,他们会自动重定向到您网站的 HTTPS 地址。选择2启用重定向,或者1如果您希望将 HTTP 和 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): 2

输入您的回复后,Certbot 的配置将完成。您将收到有关新证书​​的最终说明、生成文件的位置以及如何使用外部工具测试您的配置以分析证书的真实性:

Output
Congratulations! You have successfully enabled https://your_domain and your_domain You should test your configuration at: https://www.ssllabs.com/ssltest/analyze.html?d=your_domain https://www.ssllabs.com/ssltest/analyze.html?d=your_domain - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/your_domain/privkey.pem Your cert will expire on 2022-03-07. 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" - 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

您的证书将被下载、安装并加载到 Apache 的配置中。尝试使用重新加载您的网站https://并注意浏览器的安全指示器。它应该表明该站点已得到适当保护,通常在地址栏中有一个锁定图标。

您可以使用SSL 实验室服务器测试从外部服务的角度验证您的证书等级并获取有关证书的详细信息。

在下一步中,您将测试 Certbot 的自动续订功能,该功能保证您的证书将在到期日期之前自动续订。

第 5 步 — 验证 Certbot 自动续订

Let’s Encrypt 证书的有效期只有九十天。这是为了鼓励用户自动执行证书续订过程,并确保滥用的证书或被盗的密钥早日过期。

The certbot您安装的软件包通过包含更新脚本来处理更新/etc/cron.d,它由一个systemctl服务调用certbot.timer。该脚本每天运行两次,并将自动续订过期三十天内的任何证书。

检查此服务的状态并确保其处于活动状态并正在运行:

  1. sudosystemctl 状态 certbot.timer

您将收到类似于以下内容的输出:

Output
● 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:

  1. sudocertbot 更新 --dry-run

如果没有收到错误,则一切就绪。必要时,Certbot 将更新您的证书并重新加载 Apache 以获取更改。如果自动续订过程失败,Let’s Encrypt 会向您指定的电子邮件发送一条消息,在您的证书即将过期时向您发出警告。

结论

在本教程中,您安装了 Let’s Encrypt 客户端certbot,为您的域配置并安装 SSL 证书,并确认 Certbot 的自动证书续订服务在以下时间内处于活动状态systemctl。如果您对使用 Certbot 有其他疑问,他们的文档是一个很好的起点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Ubuntu 18.04 上使用 Let's Encrypt 保护 Apache 的相关文章

随机推荐

  • 如何在 Debian 9 上安装 Minecraft 服务器

    我的世界 是有史以来最受欢迎的游戏之一 这是一款关于建造各种结构并进行冒险的沙盒视频游戏 本教程介绍了如何在 Debian 9 上安装和配置 Minecraft 服务器 我们将使用 Systemd 来运行 Minecraft 服务器和mcr
  • 如何在 Ubuntu 18.04 上安装 Opera Web 浏览器

    Opera是世界上最流行的跨平台网络浏览器之一 它是专为现代网络构建的快速 易于使用且安全的浏览器 Opera 基于与Chrome并提供类似的浏览体验 并允许您从 Google 官方网上应用店安装 Chrome 扩展程序 它具有内置功能 例
  • 如何在 Vim / Vi 中显示行号

    Vim Vi 是许多软件开发人员和 L inux 系统管理员首选的文本编辑器 默认情况下 Vim 不显示行号 但可以轻松打开它们 Vim 支持三种行号模式 可帮助您浏览文件 除了标准的绝对行编号之外 Vim 还支持相对和混合行编号模式 本文
  • 如何在 CentOS 7 上安装 Webmin

    Webmin是一个用于 Linux UNIX 系统管理的开源 Web 控制面板 Webmin 允许您管理用户 组 磁盘配额以及配置最流行的服务 包括 Web FTP 电子邮件和数据库服务器 本教程介绍如何在 CentOS 7 服务器上安装
  • 如何在 Linux 中更改 SSH 端口

    默认情况下 SSH 侦听端口 22 更改默认 SSH 端口可以降低自动攻击的风险 从而为您的服务器增加了额外的安全层 本教程介绍如何更改 Linux 中的默认 SSH 端口 我们还将向您展示如何配置防火墙以允许访问新的 SSH 端口 保护服
  • 如何使用 SOCKS 隧道在没有 VPN 的情况下安全地路由 Web 流量

    作者选择了COVID 19 救济基金接受捐赠作为为捐款而写程序 介绍 在某些时候 您可能会发现自己所在的网络不安全或防火墙限制过于严格 并且您需要确保没有人在监视您的流量 一种解决方案是使用 VPN 但许多 VPN 需要在您的计算机上安装特
  • Java 集合 sort()

    今天我们将研究Java集合的排序方法 在与java中的集合 我们经常需要对数据进行排序 Java 集合 sort Java Collections类为我们提供了非常方便的方法Collections sort 对所有进行排序List实施例如链
  • 提高 React 应用程序性能的 5 个技巧

    您的 React 应用程序是否感觉有点迟缓 您是否因为可能看到的内容而害怕打开 Chrome DevTools 中的 paint flash 试试这 5 个性能技巧 本文包含 React 开发的 5 个性能技巧 您可以使用此目录快速浏览本文
  • 如何在 Linux 上读取和设置环境变量和 Shell 变量

    介绍 当通过 shell 会话与服务器交互时 shell 会编译许多信息来确定其行为和对资源的访问 其中一些设置包含在配置设置中 而其他设置则由用户输入确定 shell 跟踪所有这些设置和详细信息的一种方法是通过它维护的一个称为环境 环境是
  • Python 当前日期时间

    我们可以使用Python datetime模块来获取本地系统的当前日期和时间 from datetime import datetime Current date time in local system print datetime no
  • 如何在 CentOS 7 上安装和使用 Docker

    介绍 Docker 是一个应用程序 可以让在容器中运行应用程序进程变得简单 容易 就像虚拟机一样 只是更便携 更资源友好 更依赖于主机操作系统 有关 Docker 容器的不同组件的详细介绍 请查看Docker 生态系统 常用组件简介 在 C
  • 如何在 Ubuntu 18.04 上安装/卸载 NodeJS

    NodeJS 是一个 JavaScript 框架 可让您轻松构建快速的网络应用程序 在本指南中 我们将深入研究如何在 Ubuntu 18 04 上安装 NodeJS 步骤 1 将 NodeJS PPA 添加到 Ubuntu 18 04 首先
  • 在 C/C++ 中使用 getch() 函数

    在本文中 我们将了解在 C C 中使用 getch 函数 如果您想读取从键盘输入的字符 getch 函数非常有用 虽然这不是 C 标准的一部分 但这仍然是 POSIX C 函数 因此 我们仍然可以在 Windows Linux Mac 上使
  • 如何保护 Ubuntu 14.04 上的 Redis 安装

    介绍 Redis 是一种内存中 NoSQL 键值缓存和存储 也可以持久保存到磁盘上 本教程展示如何实现 Redis 服务器的基本安全性 但是 请记住 Redis 是为以下用户而设计的 值得信赖的客户 in a 可信环境 本身没有强大的安全功
  • Python 漂亮打印 JSON

    我们可以使用Python json 模块漂亮地打印 JSON 数据 建议使用 json 模块来处理 JSON 文件 我们可以使用dumps 方法来获取格式漂亮的 JSON 字符串 1 Python漂亮打印JSON字符串 import jso
  • 如何在 JavaScript 中使用运算符进行数学运算

    介绍 数学运算是任何编程语言最基本和通用的功能之一 在 JavaScript 中 数字经常用于常见任务 例如查找浏览器窗口大小 获取货币交易的最终价格以及计算网站文档中元素之间的距离 尽管对数学的高度理解并不是成为一名有能力的开发人员的先决
  • 如何实现SQL INSTR()函数?

    嘿伙计 在这篇文章中 我们将了解SQL INSTR 函数详细 SQL INSTR 的工作原理 SQL 作为一种查询语言 包含各种内置函数来处理数据库的字符串数据值 SQL INSTR 函数就是这样一个有趣的函数 SQL INSTR func
  • Java 从 URL 下载文件

    今天我们将学习如何用java从URL下载文件 我们可以用java net URL openStream java程序中从URL下载文件的方法 我们可以使用Java NIO Channels或Java IO InputStream从URL打开
  • 如何在Java中合并两个列表?

    在 Java 中合并两个列表通常是一个有用的操作 这些列表可以是 ArrayList 或 LinkedList 如何在 Java 中合并两个列表 在 Java 中 我们可以通过多种方式合并两个列表 让我们探索一些简单的方法来完成您的工作 1
  • 如何在 Ubuntu 18.04 上使用 Let's Encrypt 保护 Apache

    介绍 Let s Encrypt 是一个证书颁发机构 CA 提供免费获取和安装的方法TLS SSL 证书 从而在 Web 服务器上启用加密的 HTTPS 它通过提供软件客户端简化了流程 Certbot 它尝试自动化大多数 如果不是全部 所需