我把我的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>
希望这可以帮助别人。
富有/狡猾的机器人。