1

Мы размещаем два веб-сайта на нашем довольно маленьком, но выделенном производственном сервере. Оба сайта требуют SSL-аутентификации.

Итак, у нас есть виртуальные хосты для них обоих. Они оба ссылаются на свои собственные файлы domain.key, domain.crt и domain.intermediate.crt.

Каждый CSR и файл сертификата для каждого сайта были настроены с использованием собственной уникальной информации, и между ними ничего не передается (кроме самого сервера)

Тем не менее, на какую символическую ссылку сайта (установленную в /etc /apache2 /sites-enabled) сначала указывается ссылка на сайт, на которую ссылается сертификат, даже если мы посещаем второй сайт.

Например, предположим, что нашими компаниями являются Cadbury и Nestle. Мы настроили оба сайта с их собственными сертификатами, но мы сначала создаем символическую ссылку Cadbury в папке Apache, включающей сайт, а затем в Nestle.

Вы можете посетить Nestle совершенно нормально, но если вы проверите установку сертификата, он ссылается на сертификат Cadbury.

Мы размещаем эти веб-сайты на выделенном сервере Ubuntu 12.04.3 LTS. Оба сертификата предоставлены Thawte.com.

Я наткнулся на несколько потенциальных решений без какой-либо степени успеха. Надеюсь, у кого-то еще есть достойное решение?

Спасибо

Редактировать: Единственное другое решение, которое, похоже, дало успех некоторым людям, - это использование SNI с Apache. Однако настройки здесь, похоже, совсем не совпадают с нашими настройками.

1 ответ1

3

Проблема с размещением нескольких сайтов SSL на одном IP-адресе заключается в том, что сначала происходит обмен сертификатами SSL, а не оператор GET, который позволяет веб-серверу узнать, на какой сайт вы ориентируетесь.

Даже если вы введете имя сервера https://google.com в своем браузере, оно преобразуется в его IP-адрес, а сеанс SSL инициируется по IP-адресу. Конкретный URL-адрес, на который мы нацелены, не может быть частью стандартного рукопожатия SSL, в противном случае это будет видно перехватчикам. Таким образом, веб-сервер не может знать, какой сертификат использовать, и поэтому обычно использует первый.

SNI - это расширение TLS/SSL, которое позволяет включать имя хоста в согласование сеанса. В наши дни это широко поддерживается клиентами и серверами. Хотя это делает имя хоста видимым для перехватчиков, оно считается приемлемым, поскольку оно включает только имя хоста, а не полный URL-адрес (который может содержать конфиденциальную информацию), и вы, скорее всего, выполнили незашифрованный поиск DNS для имени хоста непосредственно перед тем, как отключить Сеанс SSL.

В Apache есть три шага:

  1. Не используйте веб-сайт по умолчанию на 443
  2. Используйте директивы ServerName в своем определении:443 виртуального хоста
  3. Убедитесь, что Apache собран с недавним OpenSSL

Вы получите сообщение в журнале ошибок Apache, если оно не создано с поддержкой SNI:

 You should not use name-based virtual hosts in conjunction with SSL!!

Если все хорошо, вы получите следующее в журналах:

 [warn] Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .