![Debian Squeeze 升级导致 Apache SSL 中断](https://linux22.com/image/538711/Debian%20Squeeze%20%E5%8D%87%E7%BA%A7%E5%AF%BC%E8%87%B4%20Apache%20SSL%20%E4%B8%AD%E6%96%AD.png)
我将 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>
希望这对其他人有帮助。
富有/巧妙的机器人。