A Atualização do Squeeze do Debian Interrompe o Apache SSL

2

Eu atualizei meu Debian de Lenny para Squeeze. GRANDE ERRO.

Agora eu recebo:

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

espalhados por todo o /var/log/apache2/error.log .

Como consertar? Olhando através de uma confusão de fóruns, é fácil ver que o Apache mudou a forma como lê as configurações em torno do 2.2.13. Ótimo. Mas não é ótimo para mim ou para os milhões de outros administradores da Web que agora têm servidores da Web que simplesmente não são iniciados, e uma mensagem de erro que diz NADA sobre o problema ou como corrigi-lo.

Alguém realmente resolveu esse problema? Eu tinha servidores virtuais funcionando perfeitamente com SSL antes (por anos, na verdade).

    
por PP. 08.02.2011 / 17:44

4 respostas

10

Esse problema é causado por uma alteração no apache 2.2.12 para suportar SNI .

Você pode encontrar todos os detalhes para corrigir o problema no arquivo /usr/share/doc/apache2.2-common/NEWS.Debian.gz no seu servidor:

apache2 (2.2.13-2) unstable; urgency=high

  • The new support for TLS Server Name Indication added in 2.2.12 causes Apache to be stricter about certain misconfigurations involving name based SSL virtual hosts. This may result in Apache refusing to start with the logged error message:

    Server should be SSL-aware but has no certificate configured [Hint: SSLCertificateFile]

    Up to 2.2.11, Apache accepted configurations where the necessary SSL configuration statements were included in the first (default) block but not in subsequent blocks. Starting with 2.2.12, every VirtualHost block used with SSL must contain the SSLEngine, SSLCertificateFile, and SSLCertificateKeyFile directives (SSLCertificateKeyFile is optional in some cases).

    When you encounter the above problem, the output of the command

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

    may be useful to determine which VirtualHost sections need to be changed.

    Also, formerly accidentially working constructs like

    <VirtualHost *:80 *:443>
    

    where one virtual host definition is used for both a non-ssl and a ssl virtual host do not work anymore. You can achieve a similar effect with

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

    -- Stefan Fritsch Wed, 16 Sep 2009 20:14:59 +0200

Informações importantes para atualização de pacotes estão disponíveis no arquivo NEWS.Debian para muitos pacotes. A instalação do pacote apt-listchanges é recommanded para ver as alterações nesses arquivos em cada atualização.

    
por 08.02.2011 / 18:24
3

Você precisa substituir:

Listen 443

com

Listen 443 http

Na mesma hora, acho que funcionará apenas no caso de você herdar a configuração SSL do host virtual padrão correspondente e usar construções como <VirtualHost *:80 *:443> . Em geral, isso pressupõe que você esteja usando o certificado SSL curinga. Essas alterações desativarão verificações para SSLCertificateFile no VirtualHost correspondente.

NÃO desabilitará a https funcionalidade para esse VirtualHost.

Enquanto tal erro você terá desde o Apache 2.2.12 foi melhorado no Apache 2.2.14

De acordo com o changelog do Apache 2.2.14:

mod_ssl: The error message when SSLCertificateFile is missing should at least give the name or position of the problematic virtual host definition.

Portanto, se a mensagem de erro indicar nome / posição de definição problemática - melhor verificar / corrigir o host virtual correspondente.

Esta é a solução de aqui

Você também pode se interessar por mensagens de Stefan Fritsch aqui

    
por 09.08.2012 / 16:19
1

Estou adicionando isso porque é especificamente como resolvi o problema. No entanto, eu estou concedendo a resposta desta pergunta para Salsify @Fussy que me deu a resposta que eu precisava.

De acordo com o link oferecido, /usr/share/doc/apache2.2-common/ NEWS.Debian.gz , eu corri o seguinte comando do meu diretório /etc/apache2 :

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

Eu tenho cerca de 5 sites virtuais diferentes no meu servidor. Eu encontrei o site que não tinha nenhuma opção SSL dentro do bloco VirtualHost , por exemplo:

<VirtualHost *:443>
</VirtualHost>

Observe que outros sites virtuais no meu servidor tinham blocos como este:

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

Então, abri meu arquivo de configuração específico do site em /etc/apache2/sites-enabled/nnn-specific e inseri as linhas:

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

dentro do bloco <VirtualHost>...</VirtualHost> .

O servidor agora é executado.

Aparentemente, as configurações do VirtualHost costumavam herdar da configuração inicial do VirtualHost. Esse era um comportamento geralmente recomendado para ser usado pela maioria dos tutoriais do Apache - fomos instruídos a configurar um host padrão (o primeiro) com a configuração SSL e que seria herdado por todos os outros. Estou muito infeliz isso foi mudado.

    
por 09.02.2011 / 09:39
0

Como o SNI não estava disponível no Lenny (e ainda não é suportado no MSIE / WinXP BTW) usei um curinga certificado de domínio, então usado VirtualDocumentRoot para fornecer vários vhosts usando o mesmo certificado.

Foi assim que consertei minha instalação após a atualização:

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

Em seguida, no padrão-ssl, altere

<VirtualHost _default_:443>

para

<VirtualHost *:443>

espero que isso ajude os outros.

Robô Rico / Artful.

    
por 07.03.2011 / 10:56