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

简介

当配置为使用ssl模块,但缺少TLS/SSL公有证书和对应的私钥时,会生成AH02572:无法配置至少一个证书和密钥错误消息。该错误将阻止阿帕奇启动,错误消息本身将在阿帕奇的日志中找到。

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

如果您已经确定您的APACHE服务器受到AH02572错误的影响,并且您想跳过故障排除步骤,本教程末尾的[将SSL证书添加到Apache](# setting-a-global-servername-directive)]一节解释了如何解决该错误。

使用systemctl排查故障

当您正在排除AH02572:Failed to configure at least one certificate and key错误消息时,Apache将无法运行。它的systemctl状态将显示失败消息。

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

1[label Ubuntu and Debian Systems]
2sudo systemctl status apache2.service -l --no-pager

在CentOS和Fedora系统上,使用以下命令检查APACHE的状态:

1[label CentOS and Fedora Systems]
2sudo systemctl status httpd.service -l --no-pager

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

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

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

需要注意的重要行是那些显示APACHE启动失败的行。但是,输出中没有任何内容指示AH02572错误消息。使用Journal alctl命令检查apache的systemd日志,或使用apachectl figest检查apache的配置文件,都无助于找到可用于排除错误的信息。

为了诊断和解决AH02572错误,下一节将介绍如何直接检查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

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

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

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

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

1[secondary_label Output]
2[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。让我们加密是一个免费的CA,您可以使用它来颁发有效的证书。此方法将确保对进出服务器的流量进行正确加密,并确保Web浏览器和其他HTTP客户端信任您的Apache服务器。

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

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

以下各节说明如何使用这三个选项中的每一个来解决AH02572错误。

用加密TLS证书解决AH02572错误

要使用免费的We‘s Encrypt TLS证书加密到您的ApacheServer的流量,请使用本教程系列中特定于您的Linux发行版的指南之一:How to Secure ApacheWith We’s Encrypt.

我们的加密过程基本上是自动化的,脚本将为您配置Apache.此外,颁发的证书也将自动续签,因此您不必担心它将来会过期。

如果您使用的LINUX发行版没有包含在_How to Secure ApacheWith We‘s Encrypt_Series中,则We’s Encrypt文档包含指向交互式Certbot说明)的链接,它可以帮助您使用有效的TLS证书配置您的APACHE服务器。

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

要使用自签名证书加密到您的ApacheServer的通信,请使用本系列教程之一,该教程解释了如何使用Apache](https://www.digitalocean.com/community/tutorial_collections/self-signed-ssl-certificates-apache).创建[自签名SSL证书

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

如果您使用的不是带有apache_set的自签名SSL证书中列出的发行版,OpenSSLEssentials:使用SSL证书、私钥和CSRs指南》可以帮助您创建可用于apache的私钥和自签名公共证书。

<$>[备注] 注意: 如果可能,最好使用免费的让我们加密证书,或其他商业发行的TLS证书。默认情况下,浏览器和其他HTTP客户端不信任自签名TLS证书。因此,您的用户在访问您的站点时将看到安全错误。但是,如果您正在进行本地开发,或者您的用例不需要有效的TLS证书,则可以选择自签名方法。 <$>

关闭ssl模块

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

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

1sudo a2dismod ssl

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

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

一旦禁用了ssl模块,运行apachectl来测试配置是否有效。

1sudo apachectl configtest

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

1[secondary_label Output]
2Syntax OK

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

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

1sudo systemctl restart apache2.service

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

1sudo systemctl restart httpd.service

如果systemctl命令没有错误,则说明您成功禁用了ssl模块。

总结

AH02572:至少配置一个证书失败,密钥错误很难检测和排除。无法使用常见的systemctlJouralctlapachectl命令诊断它们。在本教程中,您学习了如何使用grep实用程序直接检查Apache的日志,以寻找AH02572错误的证据。

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

Published At
Categories with 技术
Tagged with
comments powered by Disqus