Apache 配置错误 AH02572:无法配置至少一个证书和密钥


该系列的一部分:
常见的 Apache 错误

本教程系列介绍了如何对使用Apache Web 服务器时可能遇到的一些最常见错误进行故障排除和修复

本系列中的每个教程都包含对常见 Apache 配置、网络、文件系统或权限错误的描述。本系列首先概述了可用于对 Apache 进行故障排除的命令和日志文件。后续教程详细检查特定错误。

介绍

ApacheAH02572: Failed to configure at least one certificate and key在配置为使用该ssl模块时会生成错误消息,但缺少 TLS/SSL 公共证书和相应的私钥。该错误将阻止 Apache 启动,错误消息本身将在 Apache 的日志中找到。

在本教程中,您将学习如何使用本系列开头如何对常见 Apache 错误进行故障排除教程中描述的方法对 AH02572 错误进行故障排除您还将学习如何设置SSLCertificateFileSSLCertificateKeyFile指令来解析消息。

如果您已经确定您的 Apache 服务器受到 AH02572 错误的影响,并且您想跳过故障排除步骤,本教程末尾的向 Apache 添加 SSL 证书部分说明了如何解决该错误。

故障排除 使用 systemctl

当您对AH02572: Failed to configure at least one certificate and key错误消息进行故障排除时,Apache 将不会运行。systemctl状态将显示一条failed消息。

要检查 Apache 的状态systemctl,请在 Ubuntu 和 Debian 派生的 Linux 发行版上运行以下命令:

Ubuntu 和 Debian 系统
  • sudo systemctl status apache2.service -l --no-pager

在 CentOS 和 Fedora 系统上,使用此命令检查 Apache 的状态:

CentOS 和 Fedora 系统
  • sudo systemctl status httpd.service -l --no-pager

-l标志将确保systemctl输出一行的全部内容,而不是用省略号 ( )替换长行。--no-pager标志会将整个日志输出到您的屏幕,而无需调用这样的工具less,一次只显示一个内容屏幕。

您应该会收到类似于以下内容的输出:

Output
● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: failed (Result: exit-code) since Fri 2020-07-31 16:02:41 UTC; 20s ago Process: 36 ExecStart=/usr/sbin/apachectl start (code=exited, status=1/FAILURE) Jul 31 16:02:41 7d6ef84b6907 systemd[1]: Starting The Apache HTTP Server... Jul 31 16:02:41 7d6ef84b6907 apachectl[36]: Action 'start' failed. Jul 31 16:02:41 7d6ef84b6907 apachectl[36]: The Apache error log may have more information. Jul 31 16:02:41 7d6ef84b6907 systemd[1]: apache2.service: Control process exited, code=exited status=1 Jul 31 16:02:41 7d6ef84b6907 systemd[1]: apache2.service: Failed with result 'exit-code'. Jul 31 16:02:41 7d6ef84b6907 systemd[1]: Failed to start The Apache HTTP Server.

需要注意的重要行是那些表明 Apache 无法启动的行。但是,输出中没有任何内容指示 AH02572 错误消息。检查systemd使用的Apache日志journalctl命令,或检查与Apache的配置文件apachectl configtest将不利于查找信息,您可以使用排除错误。

为了诊断和解决 AH02572 错误,下一节将解释如何直接检查 Apache 的日志。

检查 Apache 的日志

Apache 将有关其内部操作的诊断信息记录到不同的位置,这取决于您的 Linux 发行版。通常,Apache 配置为将错误消息从访问请求记录到单独的日志文件中,以帮助调试、监控和警报。

在 Ubuntu 和 Debian 派生系统上,Apache 默认使用/var/log/apache2/error.logfor 错误消息。

在 CentOS、Fedora 和 RedHat 派生系统上,Apache 默认将错误记录到/var/log/httpd/error_log文件中。

要检查 Apache 的日志以获取 AH02572 错误消息的证据,请使用该grep实用程序在您的发行版的相应日志文件中搜索错误代码。虽然less您可以使用其他类似工具来查找 AH02572 错误的证据,但grep只会显示带有错误代码的行,以便您确定您是否受到该问题的影响。

grep在 Ubuntu 和 Debian 派生系统上像这样调用

  • sudo grep AH02572 /var/log/apache2/error.log

在 CentOS、Fedora 和 RedHat 派生系统上,使用以下命令:

  • sudo grep AH02572 /var/log/httpd/error_log

如果您的 Apache 服务器受到 AH02572 错误的影响,您将得到如下输出:

Output
[Mon Aug 03 13:21:47.677235 2020] [ssl:emerg] [pid 26:tid 140355819735360] AH02572: Failed to configure at least one certificate and key for 203.0.113.0:443

如果您的服务器受到 AH02572 错误的影响,本教程的下一部分将说明如何通过禁用ssl模块或使用私钥和公共证书文件配置 Apache来解决该错误

解决 AH02572 错误

有三种方法可以解决 AH02572 错误。解决该错误的第一个选项是使用由公认的证书颁发机构 (CA) 签署的私钥和公共证书来配置 Apache。Let’s Encrypt 是一个免费的 CA,您可以使用它来颁发有效的证书。这种方法将确保进出服务器的流量得到正确加密,并且 Web 浏览器和其他 HTTP 客户端信任您的 Apache 服务器。

另一种方法是为您的 Apache 服务器创建一个自签名证书。这种方法对于开发和测试环境很有用,或者在您的服务器没有直接连接到 Internet 并且您可以手动在系统之间建立信任的情况下很有用。

解决 AH02572 错误的最后一种方法是ssl完全关闭 Apache 的模块。此选项是最不受欢迎的,因为进出服务器的流量不会被加密。但是,如果您仅将 Apache 服务器用于本地开发或在受信任的环境中,则此方法可能有效。

以下部分解释了如何使用三个选项中的每一个来解决 AH02572 错误。

使用 Let’s Encrypt TLS 证书解决 AH02572 错误

要使用免费的 Let’s Encrypt TLS 证书加密到 Apache 服务器的流量,请使用本教程系列中特定于您的 Linux 发行版的指南之一:如何使用 Let’s Encrypt 保护 Apache

Let’s Encrypt 过程大多是自动化的,脚本将为您配置 Apache。此外,颁发的证书也会自动更新,因此您不必担心它会过期。

如果您使用的 Linux 发行版未包含在How To Secure Apache with Let’s Encrypt系列中,Let’s Encrypt 文档包含指向交互式 Certbot 说明的链接,可帮助您使用有效的 TLS 证书配置 Apache 服务器。

使用自签名证书解决 AH02572 错误

要使用自签名证书加密到 Apache 服务器的流量,请使用本系列教程之一,其中介绍了如何使用 Apache创建自签名 SSL 证书

这些教程演示了如何为您的 Apache 服务器生成私钥和公共证书。他们还演示了如何使用SSLCertificateFileSSLCertificateKeyFileApache 指令使用您生成的证书配置您的服务器。

如果您使用的不是使用Apache自签名 SSL 证书系列教程中列出的发行版,则OpenSSL Essentials:使用 SSL 证书、私钥和 CSR指南可以帮助您创建私钥和自签名公共证书您可以与 Apache 一起使用。

注意:在可能的情况下,最好使用免费的 Let’s Encrypt 证书,或其他商业发行的 TLS 证书。默认情况下,浏览器和其他 HTTP 客户端不信任自签名 TLS 证书。因此,您的用户在访问您的网站时会看到安全错误。但是,如果您正在进行本地开发,或者您的用例不需要有效的 TLS 证书,您可以选择自签名方法。

禁用ssl模块

解决 AH02572 错误的最后一种方法是通过禁用ssl模块来关闭 Apache 的 TLS/SSL 支持这种方法不如使用 TLS 证书加密到服务器的流量更可取,因此请确保在禁用该模块之前不需要 TLS 支持。

ssl在 Ubuntu 和 Debian 派生系统上禁用 Apache 的模块,请运行以下命令:

  • sudo a2dismod ssl

在 CentOS、Fedora 和 RedHat 派生系统上,使用以下命令禁用该模块:

  • sudo rm /etc/httpd/conf.modules.d/00-ssl.conf

禁用ssl模块后,运行apachectl以测试配置是否有效。

  • sudo apachectl configtest

成功的apachectl configtest调用应该会产生如下输出:

Output
Syntax OK

您现在可以使用适合systemctl restart您的 Linux 发行版的命令重新启动 Apache

在 Ubuntu 和 Debian 派生系统上,运行以下命令:

  • sudo systemctl restart apache2.service

在 CentOS、Fedora 和 RedHat 派生系统上,使用此命令重新启动 Apache:

  • sudo systemctl restart httpd.service

如果systemctl命令中没有错误,则您已ssl成功禁用该模块。

结论

AH02572: Failed to configure at least one certificate and key错误很难检测和排除。它们不能被诊断为一般的systemctljournalctlapachectl命令。在本教程中,您学习了如何使用该grep实用程序直接检查 Apache 的日志以寻找 AH02572 错误的证据。

接下来,您学习了如何使用 Let’s Encrypt 为 Apache 配置 TLS 证书以保护您的流量并解决 AH02572 错误。您还了解了如何在开发和隔离环境中使用自签名 TLS 证书。最后,您学会了如何在ssl不需要的情况下关闭模块。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁