Я знаю, что для настройки SSL нужен выделенный IP. Что произойдет, если мы добавим SSL для доменов, использующих IP-адрес? (Имя виртуального хоста)
Я думаю, это хорошая идея, как объяснить, в чем на самом деле проблема с виртуальными хостами и SSL / TLS.
Когда вы подключаетесь к серверу apache через HTTP, вы отправляете вместе с ним набор заголовков http. Они выглядят так:
GET /index.html HTTP/1.1
Host: www.nice-puppies.com
Если у вас есть виртуальный хостинг, apache посмотрит на поле hosts, а затем получит для вас нужный index.html. Проблема в том, когда вы добавляете SSL / TLS. Сервер устанавливает шифрование до того, как вы отправите свой HTTP-запрос. Поэтому сервер не знает, собираетесь ли вы на www.nice-puppies.com или www.evil-haxxor.com, пока не будет завершена аутентификация / шифрование. Сервер не может угадать (так как отправка неправильного сертификата дает вам неприятное сообщение об ошибке).
Одним из решений является подстановочный сертификат (как упоминалось выше), который действителен для * .nice-puppies.com. Таким образом, вы можете использовать один и тот же сертификат для нескольких доменов, но у вас не может быть сертификата * .com (хорошо, вы можете, но это было бы очень плохо для всех остальных), поэтому в целом вам понадобится отдельный IP-адрес для каждого HTTPS домен.
Настоящее решение этой проблемы - "Указание имени сервера":
http://en.wikipedia.org/wiki/Server_Name_Indication
Его только начинают внедрять на серверах и веб-клиентах, так что это не совсем то, что вы можете использовать сейчас, но, надеюсь, через несколько лет это не будет такой большой проблемой.
Проблема в том, что сертификат SSL привязан к IP-адресу, а не имени хоста. Когда соединение приходит на IP-адрес для запроса HTTPS, первое действие - установить SSL-соединение, передав сертификат сервера и / или сертификат клиента. На этом этапе установления соединения сервер Apache не имеет возможности узнать, для чего предназначен этот запрос. Это отличается для трафика HTTP (не SSL), так как после установления соединения сервер Apache может определить конфигурацию виртуального хоста для использования, если клиент отправляет Host
заголовок, иначе он передает его первому настроенному виртуальному хосту.
Если у вас есть несколько виртуальных хостов в одном домене, вы можете настроить один групповой сертификат для IP-адреса и задать несколько виртуальных хостов с разными именами серверов; однако, если эти имена серверов не относятся к одному и тому же доменному имени, они могут вызвать ошибки клиентского сервера. Это будет работать, поскольку подстановочный сертификат будет действителен для всех имен хостов под этим доменным именем. Вам понадобится другой IP-адрес, если бы доменные имена были другими, поскольку первый сертификат, определенный для этого IP-адреса, будет тем, который будет предоставлен для подключения клиентов.
Его можно добавить в один сертификат ssl как SAN (альтернативное имя субъекта). В моем случае мне пришлось запросить сертификат организации. я использовал globalsign.
Фактически, с современным программным обеспечением вы МОЖЕТЕ обслуживать несколько сайтов HTTPS по одному IP-адресу, используя новую функцию под названием «SNI - Server Name Indication».
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 ).
Я работаю над той же проблемой. В моем тесте IE7 и более поздние версии (только в Win7 и Vista) / Chrome / Firefox / Safari / Opera поддерживают «Указание имени сервера». Фактически, если браузер использует Tsl 1.0, он поддерживает «указание имени сервера».
Я думаю, что OP спрашивает, что произойдет, если он добавит сертификат SSL к IP-адресу, который имеет много виртуальных хостов. Если ни один из других виртуальных хостов не использует сертификат SSL, он должен быть в безопасности.
Сертификат UC определенно подходит: http://www.sslshopper.com/unified-communications-uc-ssl-certificates.html
Если вы попытаетесь добавить два сертификата на один IP-адрес, везде будет использоваться только сертификат первого чтения. Один IP - один сертификат SSL.
Если вы хотите получить больше SSL-сертификатов на одном IP-адресе, рассмотрите возможность использования нескольких доменов (так называемый UCC - проверьте это @ Godaddy) или подстановочный (более дорогой) сертификат.