Debian Squeeze 升级导致 Apache SSL 中断

Debian Squeeze 升级导致 Apache SSL 中断

我将 Debian 从 Lenny 升级到了 Squeeze。大错误。

现在我得到:

[Tue Feb 08 16:34:57 2011] [error] Server should be SSL-aware but has no certificate configured [Hint: SSLCertificateFile] ((null):0)

到处都是/var/log/apache2/error.log

如何修复?浏览一堆乱七八糟的论坛,很容易发现 Apache 在 2.2.13 左右改变了读取配置的方式。很好。但对我或其他数百万网络管理员来说却不是好事,因为他们现在的网络服务器根本无法启动,错误消息中没有提到问题或解决方法。

还有人真的解决了这个问题吗?我之前 (实际上已经好几年了) 用 SSL 搭建的虚拟服务器运行得很好。

答案1

此问题是由 apache 2.2.12 中的一项更改引起的,以支持信噪比

您可以在文件中找到修复该问题的所有详细信息/usr/share/doc/apache2.2-common/NEWS.Debian.gz在您的服务器上:

apache2(2.2.13-2)不稳定;紧急程度=高

  • 2.2.12 版新增了对 TLS 服务器名称指示的支持,这导致 Apache 对某些涉及基于名称的 SSL 虚拟主机的错误配置更加严格。这可能会导致 Apache 拒绝启动并记录错误消息:

    服务器应支持 SSL,但未配置证书 [提示:SSLCertificateFile]

    截至 2.2.11,Apache 接受在第一个(默认)块中包含必要 SSL 配置语句但不包含在后续块中的配置。从 2.2.12 开始,每个与 SSL 一起使用的 VirtualHost 块都必须包含 SSLEngine、SSLCertificateFile 和 SSLCertificateKeyFile 指令(在某些情况下 SSLCertificateKeyFile 是可选的)。

    遇到上述问题时,命令的输出

    egrep -ir '^[^#]*(sslcertificate|sslengine|virtualhost)' \
        /etc/apache2/*conf* /etc/apache2/*enabled
    

    可能有助于确定哪些 VirtualHost 部分需要更改。

    此外,以前意外工作的结构如下

    <VirtualHost *:80 *:443>
    

    一个虚拟主机定义同时用于非 SSL 和 SSL 虚拟主机不再起作用。您可以使用以下方法实现类似的效果

    <VirtualHost *:80>
    Include /.../vhost.include
    </VirtualHost>
    <VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile ...
    Include /.../vhost.include
    </VirtualHost>
    

    -- Stefan Fritsch 2009 年 9 月 16 日星期三 20:14:59 +0200

许多软件包的 NEWS.Debian 文件中提供了软件包升级的重要信息。apt-listchanges建议安装软件包以查看每次升级时此文件中的更改。

答案2

您需要更换:

Listen 443

Listen 443 http

同时我认为它只在你从相应的默认虚拟主机继承 SSL 配置并使用类似结构的情况下才有效<VirtualHost *:80 *:443>。一般来说,这假设你使用通配符 SSL 证书。这些更改将禁用检查用于相应 VirtualHost 中的 SSLCertificateFile。

它不会禁用 https功能对于该VirtualHost。

虽然自 Apache 2.2.12 以来你就会遇到这样的错误,但它在 Apache 2.2.14 中得到了改进

根据 Apache 2.2.14 的更新日志:

mod_ssl:缺少 SSLCertificateFile 时的错误信息至少应该给出有问题的虚拟主机定义的名称或位置。

因此,如果错误消息表明有问题的定义的名称/位置 - 最好检查/更正相应的虚拟主机。

这是来自的解决方案这里

您可能还对 Stefan Fritsch 的消息感兴趣 这里

答案3

我之所以添加这个,是因为这是我解决问题的具体方法。不过,我将这个问题的答案授予@Fussy Salsify,他给了我所需的答案。

根据提供的链接,/usr/share/doc/apache2.2-common/NEWS.Debian.gz/etc/apache2,我从我的目录运行了以下命令:

egrep -ir '^[^#]*(sslcertificate|sslengine|virtualhost)' \
    /etc/apache2/*conf* /etc/apache2/*enabled

我的服务器上有大约 5 个不同的虚拟网站。我发现一个网站在块内没有任何 SSL 选项VirtualHost,例如:

<VirtualHost *:443>
</VirtualHost>

请注意,我的服务器上的其他虚拟站点有如下块:

<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile /etc/apache2/ssl/apache.pem
</VirtualHost>

因此,我打开了站点特定的配置文件/etc/apache2/sites-enabled/nnn-specific并插入了以下行:

    SSLEngine on
    SSLCertificateFile /etc/apache2/ssl/apache.pem

在块内<VirtualHost>...</VirtualHost>

服务器现在正在运行。

显然,VirtualHost 配置过去是从初始 VirtualHost 配置继承的。大多数 Apache 教程都鼓励使用这种行为 - 我们被指示使用 SSL 配置设置一个默认主机(第一个),所有其他主机都会继承该主机。我很不高兴这种改变。

答案4

作为信噪比在 Lenny 中不可用(并且仍然不支持 MSIE/WinXP BTW)我使用了通配符域证书,然后使用 VirtualDocumentRoot 使用同一证书提供多个 vhost。

这是我升级后修复安装的方法:

在 /etc/apache2/ports.conf 中

<IfModule mod_ssl.c>
     # If you add NameVirtualHost *:443 here, you will also have to change
     # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
     # to <VirtualHost *:443>
     # Server Name Indication for SSL named virtual hosts is currently not
     # supported by MSIE on Windows XP.
     Listen 443
     ############ add this line below ##############
     NameVirtualHost *:443
 </IfModule>

然后在 default-ssl 中,更改

<VirtualHost _default_:443>

<VirtualHost *:443>

希望这对其他人有帮助。

富有/巧妙的机器人。

相关内容