Несколько доменов с SSL на одном IP

Ответы:

28

Я думаю, что это хорошая идея, как объяснить, в чем проблема на самом деле с виртуальными хостами и SSL / TLS.

Когда вы подключаетесь к серверу Apache через HTTP, вы отправляете набор заголовков http. Они выглядят так:

GET /index.html HTTP/1.1
 Host: www.nice-puppies.com

Если у вас есть виртуальный хостинг, Apache будет просматривать поле хостов, а затем выбрать подходящий файл index.html. Проблема в том, когда вы добавляете SSL / TLS. Сервер устанавливает шифрование еще до того, как вы отправите свой http-запрос. Поэтому сервер не знает, заходите ли вы на www.nice-puppies.com или www.evil-haxxor.com, пока не завершите аутентификацию / шифрование. Сервер не может угадать (так как отправка неправильного сертификата выдает неприятное сообщение об ошибке).

Одним из решений является подстановочный сертификат (как упомянуто выше), который действителен для * .nice-puppies.com. Таким образом, вы можете использовать один и тот же сертификат для нескольких доменов, но у вас не может быть сертификата * .com (хорошо, вы можете, но это будет очень плохо для всех остальных), поэтому в общем случае вам понадобится отдельный IP для каждого домена. Домен HTTPS.

pehrs
источник
4
Хорошее объяснение, но у вас может быть сертификат UC, который разрешит несколько доменов в одном сертификате
Сэм Коган,
1
Да, вы можете иметь сертификаты унифицированных коммуникаций (сертификаты UCC / UC). Я, наверное, должен был упомянуть их. Насколько я видел, они в основном используются с Exchange / Office Communication Server. И если вы используете один и тот же сертификат для разных сайтов, вы злоупотребляете семантикой x509. Но они работают на большинстве стеков TLS.
pehrs
6
Также SNI. Ваше утверждение больше не является окончательным, pehrs. Ваше объяснение исторически точно, но больше не отражает современные технологии.
Warner
4
SNI не работает (пока?) С IE6 в Windows XP. Какой вид ограничивает стоимость, учитывая долю рынка. Я полагаю, что первоначальный пользователь больше интересовался тем, что произойдет, чем набором хаков, которые существуют, чтобы обойти это.
pehrs
Попытка исправить орфографическую ошибку в конце SHTTP для HTTPS, но это было отклонено как слишком маленькая правка.
Стюарт
8

Реальное решение этой проблемы - «Индикация имени сервера»:

http://en.wikipedia.org/wiki/Server_Name_Indication

Он только начинает распространяться на серверы и веб-клиенты, поэтому сейчас это не совсем то, что вы можете использовать, но, надеюсь, через несколько лет это не будет такой большой проблемой.


источник
2

Проблема в том, что сертификат SSL привязан к IP-адресу, а не к имени хоста. Когда соединение приходит по IP-адресу для запроса HTTPS, первым действием является установление связи SSL путем передачи сертификата сервера и / или сертификата клиента. На этом этапе установления соединения сервер Apache не может узнать, для чего предназначен запрос. Это отличается для HTTP (не-SSL) трафика, так как после того, как соединение установлено, сервер Apache может определить конфигурацию виртуального хоста для использования, если клиент отправляет Hostзаголовок, или он передает его на первый настроенный виртуальный хост.

Если у вас было несколько виртуальных хостов в одном домене, вы можете настроить один сертификат подстановки на IP-адресе и иметь несколько виртуальных хостов с разными именами серверов; однако, если эти имена серверов не находятся под одним и тем же доменным именем, они будут генерировать ошибки клиентского сервера. Это будет работать, так как подстановочный сертификат будет действителен для всех имен хостов под этим доменным именем. Вам понадобится другой IP-адрес, если доменные имена будут другими, так как первый сертификат, определенный для этого IP-адреса, будет представлен для подключения клиентов.

Джереми Бауз
источник
1

Это может быть добавлено в один сертификат ssl как SAN (Subject Alternative Name). В моем опыте я должен был запросить сертификат организации SLL. я использовал globalsign.


источник
1

Фактически, с помощью современного программного обеспечения вы МОЖЕТЕ обслуживать несколько сайтов HTTPS по одному IP-адресу, используя новую функцию под названием «SNI - индикация имени сервера».

http://en.wikipedia.org/wiki/Server_Name_Indication

http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI

Я еще не использовал это сам, но это звучит хорошо для внутренних и интранет-сайтов. Большинство современных браузеров поддерживают SNI. IE6 не поддерживает SNI, но IE7 поддерживает.

(Исправление: 20100426 - SNI вообще не поддерживается в Windows XP. Windows Vista и выше поддерживают SNI. См. «Раздел 2.2.3» по адресу http://msdn.microsoft.com/en-us/library/dd208005% 28v = PROT.13% 29.aspx # id8 ).

Стефан Ласевский
источник
2
С IE поддержка не приходит от версии IE, скорее идет от базовой версии ОС. Vista и выше поддерживают SNI. XP нет, поэтому даже с IE8 на XP вы не получите SNI.
Наско
1

Я работаю над тем же вопросом. Как показал мой тест, IE7 и более поздние версии (только в Win7 и Vista) / Chrome / Firefox / Safari / Opera поддерживают «Индикацию имени сервера». Фактически, если браузер использует Tsl 1.0, он поддерживает «Индикацию имени сервера».

Шон
источник
0

Я думаю, что ОП спрашивает, что произойдет, если он добавит сертификат SSL к IP, который имеет много виртуальных хостов. Если ни один из других виртуальных хостов не использует сертификат SSL, он должен быть в открытом виде.

Ираклис
источник
Ну, я озадачен вопросом. Название Q говорит о черном, содержание говорит о белом.
Ираклис
это белый
Ираклис
0

Если вы попытаетесь добавить два сертификата на один и тот же IP-адрес, везде будет использоваться только первый прочитанный сертификат. Один IP - один сертификат SSL.

Если вы хотите получить больше SSL-сертификатов на одном и том же IP- адресе , рассмотрите возможность получения многодоменного (так называемого UCC - проверьте его @ godaddy ) или группового (более дорогого) сертификата.

Андрейс Кайников
источник
Вы имеете в виду, что сертификат, впервые добавленный в Apache conf, будет использоваться для обоих?
нитины
1
Если у вас есть два сертификата - для сайта A и B, и apache загружает конфигурацию для хостов в последовательности A.conf, затем B.conf, тогда он будет использовать сертификат от A.conf. Или наоборот.
Андрейс Кайников