Ubuntu 14.04 Apache 2.4.7 con mod_ssl
Estoy intentando instalar un certificado de dominio (único). Por alguna razón, Apache no lo acepta y se niega a iniciarse si el sitio web relacionado está habilitado. A pesar de buscar mucho en Google, no puedo entender los mensajes de error. ¿Por qué dice que no hay ningún certificado configurado? Está configurado en el host virtual y apunta al archivo crt en la ubicación correcta.
Registro de errores
[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.
Lo que he probado:
- Sintaxis de virtualhost verificada dos veces y ruta al certificado y la clave.
- El certificado verificado dos veces tiene chmoded 644 y la clave tiene chmoded 600.
- El certificado verificado dos veces es válido. Descargado nuevamente de mi proveedor. Lo abrí en el editor.
Aquí está el servidor 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>
¿Alguna sugerencia sobre qué podría estar mal?
Respuesta1
Creo que eltrai está en el camino correcto, pero eliminaría el primer <VirtualHost>
bloque y lo usaría ServerAlias
en el segundo.
<VirtualHost _default_:443>
ServerAdmin admin@localhost
ServerName domain.tld
ServerAlias www.domain.tld
Puedes agregar tu RedirectMatch
later en ese mismo bloque para redirigir de www a non.
Respuesta2
Una cosa más para verificar que no se mencionó en las respuestas anteriores.
Si tiene "SSLEngine activado" en cualquier parte de su configuración global (básicamente en cualquier lugar fuera de VirtualHost y bloques similares) y no tiene una directiva SSLCertificateFile también definida globalmente, Apache se ahogará con esto incluso antes de llegar al host virtual y usted obtendrá este error.
El mensaje de error es realmente correcto, pero no menciona QUÉ servidor no tiene certificado.
Respuesta3
Su primer host virtual (para www.dominio.tld) no tiene SSL habilitado, aunque esté en el puerto 443.
Debe agregar SSLEngine, SSLCertificateFile, ... como en el segundo; de lo contrario, no será posible el acceso https para www.domain.tld.
Sin embargo, no estoy muy seguro de que deba provocar una negativa rotunda a comenzar...