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周围读取configuration的方式。 大。 但对我或者数百万其他networkingpipe理员而言,这些networkingpipe理员现在拥有的networking服务器根本无法启动,而且对于这个问题以及如何解决这个问题毫无头绪。

其他人真的解决了这个问题? 之前我已经使用SSL完美地工作了虚拟服务器(实际上是几年)。

这个问题是由apache 2.2.12中的一个变化引起的,以支持SNI 。

你可以find所有的细节来解决你的服务器上/usr/share/doc/apache2.2-common/NEWS.Debian.gz文件中的问题:

apache2(2.2.13-2)不稳定; 紧迫性高=

  • 在2.2.12中添加的对TLS服务器名称指示的新支持使得Apache更严格地涉及基于名称的SSL虚拟主机的某些错误configuration。 这可能会导致Apache拒绝以logging的错误消息开始:

    服务器应该是SSL感知的,但没有configuration证书[提示:SSLCertificateFile]

    截至2.2.11,Apache接受configuration,其中必要的SSLconfiguration语句包含在第一个(默认)块中,但不包括在随后的块中。 从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文件中find许多软件包。 build议安装apt-listchanges软件包,在每次升级时查看这些文件中的更改。

您需要replace:

 Listen 443 

 Listen 443 http 

同时,我认为只有在您从相应的默认虚拟主机inheritanceSSLconfiguration并使用像<VirtualHost *:80 *:443>这样的结构的情况下才能正常工作。 一般来说,假设你使用通配符SSL证书。 这些更改将禁用对相应的VirtualHost中的SSLCertificateFile的检查

它不会禁用该虚拟主机的https function

虽然这样的错误,你将有自Apache 2.2.12它在Apache 2.2.14中得到了改进

根据Apache 2.2.14的更新日志:

mod_ssl:SSLCertificateFile丢失时的错误消息应至less给出有问题的虚拟主机定义的名称或位置。

所以如果错误消息指出有问题的定义的名称/位置 – 最好检查/纠正相应的虚拟主机。

这是从这里的解决scheme

您也可能对Stefan Fritsch的消息感兴趣

我正在添加这个,因为这是我如何解决这个问题。 不过,我将这个问题的答案授予@Fussy Salsify谁给了我需要的答案。

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

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

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

 <VirtualHost *:443> </VirtualHost> 

请注意,我的服务器上的其他虚拟网站有这样的块:

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

所以,我在/etc/apache2/sites-enabled/nnn-specific打开了特定于站点的configuration文件,并插入了以下行:

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

<VirtualHost>...</VirtualHost>块内。

服务器现在运行。

显然VirtualHostconfiguration用于从初始VirtualHostconfigurationinheritance。 这是大多数Apache教程通常鼓励使用的行为 – 我们被指示使用SSLconfiguration来设置一个默认主机(第一个),这将被所有其他主机inheritance。 我很不高兴,这已经改变了。

由于SNI在Lenny中不可用(并且仍然不支持MSIE / WinXP下的BTW),我使用了通配域证书,然后使用VirtualDocumentRoot提供了多个使用相同证书的虚拟主机。

这是我升级后如何解决我的安装问题:

在/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> 

希望这可以帮助别人。

富有/狡猾的机器人。