У меня есть веб-сервер apache 2.4, работающий на Ubuntu 14.04 LTS.
Можно ли включить SSL только для одного VirtualHost, не затрагивая другие VirtualHosts (включая хост по умолчанию)?
Например, на моем веб-сервере у меня есть эти сайты, работающие по HTTP:
000-default.conf
hello.com.conf
welcome.com.conf
secure.com.conf
У меня нет default-ssl.conf
включен.
Теперь я хочу бежать secure.com.conf
под HTTPS (: 443), поэтому я включил плагин ssl с a2enmod ssl
и изменили конфигурацию VHost следующим образом:
<VirtualHost *:443>
ServerName www.secure.com
...
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/www.secure.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.secure.com/privkey.pem
</VirtualHost>
В любом случае, когда я перезапускаю apache с помощью service apache2 restart
он терпит неудачу и говорит:
[ssl:emerg] AH02240: Server should be SSL-aware but has no certificate configured [Hint: SSLCertificateFile] ((null):0)
[ssl:emerg] AH02312: Fatal error initialising mod_ssl, exiting.
РЕДАКТИРОВАТЬ:
Добавляя SSLCertificateChainFile
к конфигурации мне удалось запустить веб-сервер ...
В любом случае, если я попытаюсь загрузить (просто для тестирования) https://hello.com
, apache теперь хочет обслуживать его и все другие VirtualHosts с secure.com
сертификат и, конечно же, браузер выдает ошибку: NET::ERR_CERT_COMMON_NAME_INVALID
(1) Проверьте права доступа к закрытому ключу (2) Где ваш CA CRT?
Итак, обычно нам нужны:
а) закрытый ключ, б) серверный CRT, в) корневой / CA CRT.
Это пример
SSLCertificateFile /etc/pki/tls/certs/ca.crt
SSLCertificateKeyFile /etc/pki/tls/private/ca.key
SSLCertificateChainFile /etc/pki/tls/certs/DigiCertCA.crt
Ошибка указывает на то, что сертификат letsencrypt недоступен в местоположении SSLCertificateFile. Без сертификата сервер не может обслуживать SSL. Правильно ли вы установили letsencrypt? Обычно в ваших / etc / ssl / certs и / etc / ssl / private путях есть самозашифрованный сертификат snakeoil. Вы можете использовать это в целях тестирования: сервер будет работать нормально, но браузер будет жаловаться.
Если вы действительно пытались ударить https: //hello.com (т.е. http SECURE), это связано с тем, как Apache разрешает правильный виртуальный хост. Как отмечено в Документация Apache,
Разрешение виртуального хоста на основе имени выбирает только наиболее подходящий виртуальный хост на основе имени после сужения числа кандидатов до наилучшего соответствия на основе IP. Когда поступает запрос, сервер найдет наиболее подходящий (наиболее точный) аргумент на основе IP-адреса и порта, используемых запросом.
Если совпадение ServerName или ServerAlias не найдено в наборе виртуальных хостов, содержащих наиболее конкретную совпадающую комбинацию IP-адреса и порта, то будет использован первый в списке виртуальный хост, который соответствует этому.
Итак, в этом случае, поскольку вы запросили службу порта 443, ЕДИНСТВЕННЫЙ вариант, который сервер может попробовать, - это виртуальный хост www.secure.com (secure.com.conf). Поскольку на данный момент hello.com не соответствует secure.com, вы видите эту ошибку.
Эта ошибка должна произойти, потому что нет https://hello.com, только http://hello.com. Если вы хотите, чтобы такой трафик куда-то направлялся по умолчанию, вы можете настроить безопасный виртуальный хост по умолчанию, который перенаправляет весь безопасный трафик, не соответствующий виртуальному хосту, на безопасный виртуальный хост с правильным сертификатом.