Назад | Перейти на главную страницу

Включить SSL для одного VirtualHost

У меня есть веб-сервер 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. Если вы хотите, чтобы такой трафик куда-то направлялся по умолчанию, вы можете настроить безопасный виртуальный хост по умолчанию, который перенаправляет весь безопасный трафик, не соответствующий виртуальному хосту, на безопасный виртуальный хост с правильным сертификатом.