2008-11-09 3 views
8

У меня есть веб-сервер, который обслуживает разные доменные имена, но имеет только один IP-адрес. Это отлично работает с виртуальными хостами в Apache. Теперь я хочу, чтобы SSL-зашифрованные соединения для веб-сайтов. Как установить различные SSL-сертификаты для разных vhosts?Как настроить различные SSL-сертификаты для vhosts на Apache?

Использование разных IP-адресов для разных имен хостов было бы решением - не очень элегантным, но возможным. Но я хочу знать, как я могу использовать разные SSL-сертификаты для разных vhosts. Поэтому я ищу решение с одним IP-адресом.

ответ

8

UPDATE: 2013

Оказывается, что SNI наконец начинает овладевать, как старые браузеры отпадают. Вот docs for Apache SNI и вот wikipedia article on SNI, который содержит диаграмму в браузерах, которые ее поддерживают. Короче говоря, все основные браузеры поддерживают его в поддерживаемых версиях; если поддержка старых браузеров важна, вам, возможно, придется принять это во внимание.

------ предыдущий ответ ------------

SSL-хосты должны быть привязаны к комбинации уникальный IP-адрес/порт, таким образом, вы не можете использовать виртуальный хостинг (Или, по крайней мере, он может иметь только один хост ssl для каждого IP-адреса). Это связано с тем, что https начинает шифрование до того, как параметр Host: отправлен в http, и, следовательно, он не может определить, какой шифр использовать из имени хоста - все, что у него есть, это IP-адрес.

Это было бы глупо легко исправить, если у HTTP была команда TLS, чтобы он мог запустить SSL после запроса имени хоста, но никто не спросил меня.

Для окончательного ответа см http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html#vhosts2

+2

На самом деле, есть RFC 2817, что позволяет TLS-upgrade в HTTP-соединении. Он реализован в Apache. – 2008-11-09 17:31:12

+0

Но браузеры еще поддерживают его? – DGM 2008-11-09 18:35:14

2

AFAIK это не возможно установить различные SSL сертификаты для имен на основе виртуальных хостов с помощью mod_ssl. Вы можете прочитать подробную причину here. Альтернативой будет использование виртуальных хостов на базе IP (что, вероятно, невозможно/не очень удовлетворительное решение) - просто вставьте различные директивы SSLCertificateFile или вы можете попробовать метод this с использованием mod_gnutls.

+0

Ничего себе, что RFC для SNI был запущен в 2003 году, и все же он все еще не поймал? Меня заинтриговало утверждение, что браузеры уже поддерживают его. – DGM 2008-11-09 17:33:17

4

После подсказок в ответах и ​​комментариях к нему (особенно Мартин против Лёвиса) я сделал несколько поисковых запросов и нашел this website about RFC 2817 and RFC 3546. RFC 3546 представляется хорошим решением.

1

Вам понадобится отдельная комбинация портов IP: для каждого vhost.

RFC 3546 пока не представляется возможным. IE поддерживает его только при работе под Vista, и последний раз, когда я проверял, Safari тоже не справляется.

1

В то время как все, о чем упоминалось в DGM, верно, были попытки обойти требование для уникального IP-адреса для каждого сертификата, включая mod_gnutls, и использовать TLS extensions. Есть некоторые недостатки, но они могут быть приемлемыми для вас.

1

Наконец-то это возможно! Вам нужно как сервер и клиент для поддержки Имя сервера Индикация (SNI)

браузеры, которые поддерживают SNI:

  • Mozilla Firefox 2.0 или более поздняя версия
  • Opera 8.0 или более поздней версии (с использованием TLS 1.1 включен)
  • Internet Explorer 7.0 или более поздней версии (на Vista, не XP)
  • Google Chrome
  • Safari 3.2.1 на Mac OS X 10.5.6

Этот документ показывает, мотыгу, чтобы настроить server: SSL with Virtual Hosts Using SNI

Смежные вопросы