Назад | Перейти на главную страницу

Как отключить ненастроенные домены HTTPS в apache2.4?

Я хочу, чтобы сервер ответил на https://abc.def.com, но не https://def.com, все еще служа http://def.com когда оба домена указывают на один и тот же IP-адрес.

У меня сейчас есть такая конфигурация:

<IfModule mod_ssl.c>
  Listen 1.2.3.4:443
  <VirtualHost 1.2.3.4:443>
    ServerName abc.def.com
    [SSL on, key & cert file, etc.]
    [...]
  </VirtualHost>
</IfModule>

Сайт работает как положено и пока все нормально, но сервер почему-то тоже отвечает на https://def.com и обслуживает сертификат для abc.def.com вместо отказа в соединении, хотя это нигде не настроено. Default-ssl.conf отключен.

Есть идеи, как сказать серверу не обслуживать сертификат, но отказываться от подключения для ненастроенных доменов? Я думаю, что это должно быть каким-то образом связано с SNI, но я не уверен, возможно ли это и как.

Конфигурация Apache выглядит неплохо, вы можете исправить это на уровне DNS.

Настройте свой хост для разрешения abc.def.com, но не def.com, отредактировав файл локальных хостов и удалив запись

1.2.3.4 def.com

Вы можете сделать это с помощью перенаправления трафика на http

 <VirtualHost 1.2.3.4:443>
    ServerName def.com
    Redirect 301 / http://def.com
  </VirtualHost>

Или используя правило перезаписи

RewriteCond %{HTTPS} on
RewriteCond %{SERVER_NAME} ^def.com
RewriteRule .* http://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

Невозможно. Apache ответит на хосте по умолчанию, если для этого имени хоста не существует определенной конфигурации. И, пока безопасная сторона соединения не настроена с действующим сертификатом, вы не можете контролировать, что отправляется обратно.

Итак, только варианты:

  1. Иметь сертификат, действительный для def.com. На этом этапе вы можете перенаправить обратно на http, но если у вас возникли проблемы с получением сертификата, тогда зачем беспокоиться? Сертификаты для заметок можно получить дешево (или даже бесплатно!).

  2. Отдельный IP-адрес.