如何在 CentOS 7 上使用 Let‘s Encrypt 保护 Apache

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

简介

Let's Encrypt 是一个证书颁发机构(CA),为传输层安全性(TLS)加密提供免费证书,从而在 Web 服务器上启用加密的 HTTPS。它通过提供一个软件客户端 Certbot 简化了证书的创建、验证、签名、安装和更新过程。

在本教程中,您将使用 Certbot 在运行 Apache 作为 Web 服务器的 CentOS 7 服务器上设置来自 Let's Encrypt 的 TLS/SSL 证书。此外,您将使用定时作业自动化证书更新过程,您可以通过阅读《如何使用 Cron 在 VPS 上自动化任务》来了解更多信息。

先决条件

要完成本指南,您需要:

  • 通过遵循 CentOS 7 初始服务器设置指南设置的一个 CentOS 7 服务器,具有具有 sudo 权限的非根用户。
  • 通过遵循新 CentOS 7 服务器的附加推荐步骤指南配置的基本防火墙。
  • 在 CentOS 7 服务器上安装了 Apache,并配置了虚拟主机。您可以通过遵循我们的教程《如何在 CentOS 7 上安装 Apache Web 服务器》来了解如何设置。确保您有一个用于您的域的虚拟主机文件。本教程将使用 /etc/httpd/sites-available/example.com.conf 作为示例。
  • 拥有或控制您希望使用证书的注册域名。如果您还没有注册域名,可以在 Namecheap 上购买,或者在 Freenom 上免费获取,或者使用您选择的域名注册商。
  • 一个 DNS A 记录 ,将您的域指向服务器的公共 IP 地址。您可以通过阅读 DigitalOcean DNS 介绍中的详细信息来了解如何在 DigitalOcean 平台上添加它们。由于 Let's Encrypt 验证您拥有要为其颁发证书的域的方式,DNS A 记录是必需的。例如,如果您想要为 example.com 获取证书,那么该域必须解析到您的服务器才能使验证过程正常工作。我们的设置将使用 example.comwww.example.com 作为域名,这两个域名都需要有效的 DNS 记录。

当您完成所有这些先决条件后,继续安装 Let's Encrypt 客户端软件。

步骤 1 --- 安装 Certbot Let's Encrypt 客户端

要使用 Let's Encrypt 获取 SSL 证书,您首先需要安装 Certbot 和 mod_ssl,这是一个为 SSL v3 加密提供支持的 Apache 模块。

certbot 软件包默认情况下不会通过软件包管理器提供。您需要启用 EPEL 仓库来安装 Certbot。

要添加 CentOS 7 EPEL 仓库,请运行以下命令:

command 复制代码
sudo yum install epel-release

现在您可以访问该仓库,安装所有必需的软件包:

command 复制代码
sudo yum install certbot python2-certbot-apache mod_ssl

在安装过程中,您将被询问是否导入 GPG 密钥。该密钥将验证您正在安装的软件包的真实性。为了允许安装完成,请在提示时输入 y 并按 ENTER 键。

安装了这些服务后,您现在可以运行 Certbot 并获取您的证书。

步骤 2 --- 获取证书

现在 Certbot 已安装,您可以使用它为您的域请求 SSL 证书。

使用 certbot Let's Encrypt 客户端为 Apache 生成 SSL 证书自动化了过程中的许多步骤。该客户端将自动获取并安装一个新的 SSL 证书,该证书对您提供的域是有效的。

要执行交互式安装并获取仅覆盖单个域的证书,请使用以下命令运行 certbot

command 复制代码
sudo certbot --apache -d example.com

这将使用 --apache 插件运行 certbot,并使用 -d 标志指定要为其配置证书的域。

如果要安装一个对多个域或子域有效的单个证书,您可以将它们作为额外参数传递给命令,并使用 -d 标志标记每个新域或子域。参数列表中的第一个域名将是 Let's Encrypt 用于创建证书的基本域。因此,请将基本域名作为参数列表中的第一个域名,然后跟随任何其他子域或别名:

command 复制代码
sudo certbot --apache -d example.com -d www.example.com

在此示例中,基本域是 example.com

certbot 实用程序还可以在证书请求过程中提示您输入域信息。要使用此功能,请不带任何域调用 certbot

command 复制代码
sudo certbot --apache

程序将向您展示逐步指南以自定义您的证书选项。它将要求您提供用于丢失密钥恢复和通知的电子邮件地址,然后提示您同意服务条款。如果您没有在命令行上指定您的域,程序将要求您输入。如果您的虚拟主机文件没有使用 ServerName 指令明确指定它们提供的域,程序将要求您选择虚拟主机文件。在大多数情况下,默认的 ssl.conf 文件将起作用。

您还可以选择在启用 httphttps 访问之间进行选择,或者强制所有请求重定向到 https。出于更好的安全性考虑,建议选择选项 2: Redirect,如果您没有特殊需要允许未加密的连接。选择您的选项,然后按 ENTER 键。

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

安装成功后,您将看到类似以下的消息:

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

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

生成的证书文件将在 /etc/letsencrypt/live 目录中以您的基本域命名的子目录中可用。

现在您的证书已下载、安装和加载,您可以检查您的 SSL 证书状态,以确保一切正常工作。

步骤 3 --- 检查您的证书状态

此时,您可以通过使用云安全公司 Qualys 的 SSL 服务器测试来确保 Certbot 正确创建了您的 SSL 证书。

在您首选的 Web 浏览器中打开以下链接,将 example.com 替换为您的基础域名:

https://www.ssllabs.com/ssltest/analyze.html?d=example.com

您将会进入一个页面,该页面会立即开始测试与您服务器的 SSL 连接:

!SSL 服务器测试

一旦测试开始运行,可能需要几分钟才能完成。测试的状态将在您的浏览器中更新。

当测试完成时,页面将显示一个字母等级,用于评估您服务器配置的安全性和质量。在撰写本文时,默认设置将获得A等级:

!SSL 报告 - A

有关 SSL Labs 如何确定这些等级的更多信息,请查看 SSL Labs Grading 帖子,其中详细介绍了 2018 年 1 月对评分方案的更新。

尝试使用 https:// 重新加载您的网站,并注意您浏览器的安全指示。现在,它将指示该站点已得到适当的安全保护,通常会显示一个绿色的锁图标。

有了您的 SSL 证书已经验证,下一步是设置证书的自动更新,以保持证书的有效性。

步骤 4 --- 设置自动续订

Let's Encrypt 证书有效期为 90 天,但建议您每 60 天续订一次证书,以留有一定的错误余地。因此,最佳做法是自动化此过程,定期检查并续订证书。

首先,让我们来看一下您将用于续订证书的命令。certbot Let's Encrypt 客户端具有一个 renew 命令,它会自动检查当前安装的证书,并在距离到期日期不足 30 天时尝试续订它们。通过使用 --dry-run 选项,您可以运行此任务的模拟,以测试 renew 的工作方式:

command 复制代码
sudo certbot renew --dry-run

输出应该类似于以下内容:

Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/example.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator apache, Installer apache
Starting new HTTPS connection (1): acme-staging-v02.api.letsencrypt.org
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for example.com
http-01 challenge for www.example.com
Waiting for verification...
Cleaning up challenges
Resetting dropped connection: acme-staging-v02.api.letsencrypt.org

- - - - - - - - - - - - - - - - - - - - - - - - -

## 结论

在本指南中,您安装了 Let's Encrypt Certbot 客户端,为您的域名下载了 SSL 证书,并设置了自动证书更新。如果您对使用 Certbot 有任何疑问,可以查阅官方 Certbot 文档。我们还建议您定期查看官方 Let's Encrypt 博客,以获取重要更新。
相关推荐
冷曦_sole21 分钟前
linux-21 目录管理(一)mkdir命令,创建空目录
linux·运维·服务器
最后一个bug22 分钟前
STM32MP1linux根文件系统目录作用
linux·c语言·arm开发·单片机·嵌入式硬件
dessler41 分钟前
Docker-Dockerfile讲解(二)
linux·运维·docker
卫生纸不够用41 分钟前
子Shell及Shell嵌套模式
linux·bash
world=hello1 小时前
关于科研中使用linux服务器的集锦
linux·服务器
soragui1 小时前
【ChatGPT】OpenAI 如何使用流模式进行回答
linux·运维·游戏
白云coy2 小时前
Redis 安装部署[主从、哨兵、集群](linux版)
linux·redis
Logintern092 小时前
Linux如何设置redis可以外网访问—执行使用指定配置文件启动redis
linux·运维·redis
娶不到胡一菲的汪大东2 小时前
Linux之ARM(MX6U)裸机篇----1.开发环境搭建
linux·运维·服务器