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

来自菜鸟教程
跳转至:导航、​搜索

介绍

Apache 在配置为使用 ssl 模块时生成 AH02572: Failed to configure at least one certificate and key 错误消息,但缺少 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 消息。

要使用 systemctl 检查 Apache 的状态,请在 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 错误消息。 使用 journalctl 命令检查 Apache 的 systemd 日志,或使用 apachectl configtest 检查 Apache 的配置文件将无助于查找可用于解决错误的信息。

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

检查 Apache 的日志

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

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

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

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

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

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 错误的最后一种方法是完全关闭 Apache 的 ssl 模块。 此选项是最不受欢迎的,因为进出您的服务器的流量不会被加密。 但是,如果您仅将 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 服务器生成私钥和公共证书。 他们还演示了如何使用 SSLCertificateFileSSLCertificateKeyFile Apache 指令来使用您生成的证书配置您的服务器。

如果您使用的不是 Self-signed SSL Certificates with Apache 教程集中列出的发行版,本 OpenSSL Essentials: Working with SSL Certificates, Private Keys and CSRs 指南可以帮助您创建可用于 Apache 的私钥和自签名公共证书。

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


禁用 ssl 模块

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

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

sudo a2dismod ssl

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

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

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

sudo apachectl configtest

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

OutputSyntax OK

您现在可以使用适合您的 Linux 发行版的 systemctl restart 命令重新启动 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 模块。