尽管虚拟主机的 SSL 证书文件有错误,仍启动 Apache

尽管虚拟主机的 SSL 证书文件有错误,仍启动 Apache

我有基于名称的 SSL (SNI) 虚拟主机的 Apache 2.4.10。虚拟用户可以使用自己的证书并将其上传到服务器。

一切正常,直到证书文件出现错误(即文件丢失或名称错误)。

问题是,如果存在某些证书问题,Apache 将无法启动。

有没有什么解决方案可以解决此错误,即如何在启动 Apache 时避免出现此错误(即,除了一个出现故障的虚拟主机外,所有虚拟主机都将启动)?

这不起作用:

<If "-f '/path/to/file.crt'">
    <VritualHost *:443>
        SSLEngine On
        SSLCertificateFile /path/to/file.crt
    </VirtualHost>
</If>

...这也不起作用:

<VirtualHost *:443>
    <If "-f '/path/to/file.crt'">
        SSLEngine On
        SSLCertificateFile /path/to/file.crt
    </If>
</VirtualHost>

问题是配置中的语法错误“SSLEngine 不允许在这里”或“VirtualHost 不允许在这里”。因此,Apache 不允许我上面的配置。

非常感谢。

编辑:小打字错误

答案1

我想说,这是设计使然。SSL 证书是一种安全功能。为什么你会允许损坏的证书出现在你的系统上,这会危及整个服务器?

正如您所说,用户可以上传他们的证书,因此您需要实现这些证书的检查功能。毕竟,这些文件的有效性、拼写正确性和完整性应该由您的上传功能检查。

此外,apache 还附带一个配置检查器。

$SERVER/bin/apachectl configtest

使用此功能,您可以在重新启动之前检查您的配置文件,如果有任何错误,则不应重新启动服务器。

答案2

您不应该尝试在损坏的状态下启动 apache,而应该想办法验证用户上传的 SSL,并且只有它们有效时才应用于 apache 配置。

例如,如果以下两个 MD5 输出匹配,则证书(至少)有效(可以是自签名的,但仍然有效):

openssl x509 –noout –modulus –in <file>.crt | openssl md5
openssl rsa –noout –modulus –in <file>.key | openssl md5

相关内容