"O servidor deve reconhecer SSL, mas não possui certificado configurado"

"O servidor deve reconhecer SSL, mas não possui certificado configurado"

Ubuntu 14.04 Apache 2.4.7 com mod_ssl

Estou tentando instalar um certificado de domínio (único). Por alguma razão, o Apache não aceita e se recusa a iniciar se o site relacionado estiver habilitado. Apesar de pesquisar bastante no Google, não consigo entender as mensagens de erro. Por que diz que não há certificado configurado? Está definido no virtualhost e aponta para o arquivo crt no local correto.

Erro_log

[Tue May 19 18:11:08.123857 2015] [ssl:emerg] [pid 10040:tid 140146576725888] AH02240: Server should be SSL-aware but has no certificate configured [Hint: SSLCertificateFile] ((null):0)
[Tue May 19 18:11:08.123894 2015] [ssl:emerg] [pid 10040:tid 140146576725888] AH02312: Fatal error initialising mod_ssl, exiting.

O que eu tentei:

  • sintaxe do host virtual verificada duas vezes e caminho para certificado e chave
  • o certificado verificado duas vezes é chmoded 644 e a chave é chmoded 600
  • o certificado verificado duas vezes é válido. Baixei novamente do meu provedor. Abri no editor

Aqui está o host virtual

<IfModule mod_ssl.c>
    <VirtualHost *:443>
        ServerName www.domain.tld
        RedirectMatch (.*) https://domain.tld$1
    </VirtualHost>

    <VirtualHost _default_:443>
        ServerAdmin admin@localhost
        ServerName domain.tld
        DocumentRoot /home/user/www/domain.tld/public

        # SSL CERTIFICATES

        SSLEngine on
        SSLCertificateFile /etc/ssl/certs/domain.tld.crt
        SSLCertificateKeyFile /etc/ssl/private/domain.tld.key
        SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem
        SSLVerifyClient None
        # SSLProtocol all -SSLv2 -SSLv3

        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                        SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
                        SSLOptions +StdEnvVars
        </Directory>
        BrowserMatch "MSIE [2-6]" \
                        nokeepalive ssl-unclean-shutdown \
                        downgrade-1.0 force-response-1.0
        BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown


        <Directory /home/user/www/domain.tld/public>
            Require all granted
        </Directory>

        LogLevel error
        ErrorLog ${APACHE_LOG_DIR}/user-eu-error.log
        CustomLog ${APACHE_LOG_DIR}/user-eu-access.log combined

        ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/home/user/www/domain.tld/public/$1

        ErrorDocument 404 /missing.php

        # Mod_status
        <location /server-status> 
            SetHandler server-status 
            Order Allow,Deny
            Allow from all
        </location>
    </VirtualHost>
</IfModule>

Alguma sugestão sobre o que poderia estar errado?

Responder1

Acho que o eltrai está no caminho certo mas eu removeria o primeiro <VirtualHost>bloco e usaria ServerAliasno segundo

<VirtualHost _default_:443>
    ServerAdmin admin@localhost
    ServerName domain.tld
    ServerAlias www.domain.tld

Você pode adicionar RedirectMatchmais tarde nesse mesmo bloco para redirecionar de www para não.

Responder2

Mais uma coisa a verificar que não foi mencionada nas respostas anteriores.

Se você tiver "SSLEngine on" em qualquer lugar da sua configuração global (basicamente em qualquer lugar fora do VirtualHost e blocos semelhantes) e não tiver uma diretiva SSLCertificateFile também definida globalmente, o Apache irá engasgar com isso antes mesmo de chegar ao host virtual e você receberá esse erro.

A mensagem de erro está correta, mas não menciona QUAL servidor não possui certificado.

Responder3

Seu primeiro host virtual (para www.domain.tld) ​​não tem SSL habilitado, mesmo estando na porta 443.

Você precisa adicionar SSLEngine, SSLCertificateFile, ... como no segundo, caso contrário nenhum acesso https será possível para www.domain.tld.

Não tenho muita certeza de que isso deva causar uma recusa total de início, no entanto ...

informação relacionada