Ubuntu 14.04 Apache 2.4.7 с mod_ssl
Я пытаюсь установить сертификат (одного) домена. По какой-то причине Apache не принимает его и отказывается запускаться, если включен соответствующий веб-сайт. Несмотря на интенсивное гугление, я не могу понять смысл сообщений об ошибках. Почему он говорит, что сертификат не настроен? Он установлен в виртуальном хосте и указывает на файл crt в правильном месте.
Журнал ошибок
[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.
Что я пробовал:
- дважды проверил синтаксис виртуального хоста и путь к сертификату и ключу
- дважды проверенный сертификат имеет chmoded 644, а ключ — chmoded 600
- дважды проверенный сертификат действителен. Скачал заново у своего провайдера. Открыл в редакторе
Вот виртуальный хост
<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>
Есть ли какие-нибудь предположения, что может быть не так?
решение1
Я думаю, что eltrai на правильном пути, но я бы удалил первый <VirtualHost>
блок и использовал ServerAlias
во втором
<VirtualHost _default_:443>
ServerAdmin admin@localhost
ServerName domain.tld
ServerAlias www.domain.tld
Вы можете добавить свой RedirectMatch
вариант в тот же блок, чтобы перенаправить с www на non.
решение2
Еще одна вещь, которую следует проверить и которая не была упомянута в предыдущих ответах.
Если где-либо в вашей глобальной конфигурации включено «SSLEngine» (в основном за пределами VirtualHost и подобных блоков) и у вас нет директивы SSLCertificateFile, также определенной глобально, Apache заблокирует ее еще до того, как она дойдет до виртуального хоста, и вы получите эту ошибку.
Сообщение об ошибке на самом деле верное, но в нем не указано, КАКОЙ сервер не имеет сертификата.
решение3
На вашем первом виртуальном хосте (для www.domain.tld) не включен SSL, хотя он находится на порту 443.
Вам необходимо добавить SSLEngine, SSLCertificateFile, ... как во втором случае, в противном случае доступ по https для www.domain.tld будет невозможен.
Однако я не уверен, что это должно вызвать полный отказ от запуска...