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 ServerAlias
no segundo
<VirtualHost _default_:443>
ServerAdmin admin@localhost
ServerName domain.tld
ServerAlias www.domain.tld
Você pode adicionar RedirectMatch
mais 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 ...