Я уже сделал SSL-сертификат для своего сервера, но могу ли я использовать SSL только для определенного веб-сайта.
Например, внутри /var/www
у меня много веб-папок, и я хочу, чтобы сайт «А» использовал HTTPS, а остальные не использовали HTTPS.
Как настроить?
Вики Apache содержат прекрасную страницу о SSL с виртуальными хостами, использующими SNI . Они описывают настройку шаг за шагом. Я напишу здесь основные моменты.
Вам нужен OpenSSL версии 0.9.8f или новее. Если вы используете Ubuntu Hardy Heron (8.04) или более позднюю версию, вы получите правильную версию. Кроме того, в OpenSSL должны быть включены TLSExtensions. Это случай по умолчанию с версии 0.9.8k (Lucid, 10.04). Ваша версия Apache должна иметь поддержку SNI. Ознакомьтесь с error.log
:
[warn] Init: Виртуальные хосты SSL на основе имен работают только для клиентов с поддержкой индикации имени сервера TLS (RFC 4366)
blockquote>Если вы обнаружите, что сообщение выше, SNI включен, и если вы видите сообщение ниже, SNI не встроен.
Вы не должны использовать виртуальные хосты на основе имен вместе с SSL
blockquote>В вашей конфигурации по умолчанию вы должны установить TLSv1 в качестве поддерживаемого протокола. Ищите переменную
SSLProtocol
. Если вы не нашли никаких настроек, вы можете добавить:SSLProtocol All -SSLv2
Это добавляет поддержку всех известных разновидностей SSL и TLS, но не SSL версии 2.
Теперь вам нужно настроить виртуальный хост и, возможно, активировать поддержку SSL (
sudo a2ensite ssl
плюс перезапуск Apache):<virtualhost *:443> SSLEngine On SSLCertificateFile /path/to/your/sslcert DocumentRoot /path/your/webcontent </virtualhost>
Кроме того, установите
SSLStrictSNIVHostCheck on
в конфигурации Apache или vhost. Теперь вы можете перезапустить ваш Apache и, вероятно, иметь поддержку SSL. Однако у SNI есть много подводных камней. Если вы обнаружите какие-либо ошибки, проверьте ваш error.log. Это может дать вам совет, что пошло не так.Документация Apache содержит подробное описание их поддержки SSL .