2

Недавно я приобрел сертификат SSL для своего основного сайта (https://wemarsh.com/). Он отлично работает, и я даже настроил правило .htaccess, чтобы весь трафик на этом сайте был зашифрован. (Я использую Apache.)

Однако у меня также есть другие сайты на этом же сервере, с тем же IP-адресом. Например, у меня есть блог (http://gallivant.wemarsh.com/). Это прекрасно работает, пока я подключаюсь к незашифрованной версии. Я не хочу включать шифрование для этого сайта, так как знаю, что мой существующий сертификат не включает этот поддомен, и я не хочу платить за дополнительный IP-адрес для этого. Так что все хорошо, если пользователь вводит http://, но если пользователь вводит https:// (по какой-либо причине), появляется предупреждение о том, что сайт является мошенником (как и ожидалось, потому что сертификат неверен). Но если пользователь нажимает, чтобы продолжить, он переносит их на основной сайт, а не в блог на поддомене. Это обстоятельство, которое редко встречается на практике, но я чувствую, что правильное поведение - предупреждать, а затем переходить к правильному "самозванскому" сайту. Или, возможно, мне было бы хорошо, если бы он просто полностью провалился.

Я понимаю некоторые проблемы в игре. Во-первых, я понимаю, что работа с SSL происходит до того, как Apache получает запрос, поэтому обычно нельзя иметь несколько сертификатов на одном IP-адресе. Похоже, что это также мешает мне просто использовать правило .htaccess для переадресации всех на http:// версию сайта (в отличие от того, что я делаю на основном сайте).

Таким образом, я понимаю, что происходит: SSL обрабатывает запрос сертификата, возвращая неверный сертификат в браузер. Браузер блокируется, но позволяет нам продолжить. Тогда Apache не знает, какой URL был запрошен, но знает, что он был на порту 443, поэтому он возвращает основной сайт. Браузер считает, что у него есть блог субдоменов, поэтому он по-прежнему отображает этот URL.

Мои текущие vhosts для основного сайта таковы:

<VirtualHost *:80>
  ServerAdmin redacted@wemarsh.com
  ServerName  www.wemarsh.com
  ServerAlias wemarsh.com

  DirectoryIndex index.html
  DocumentRoot redacted
</VirtualHost>

<VirtualHost *:443>
  ServerAdmin redacted@wemarsh.com
  ServerName  www.wemarsh.com
  ServerAlias wemarsh.com

  SSLEngine on
  SSLCertificateFile redacted
  SSLCertificateKeyFile redacted
  SSLCertificateChainFile redacted
  SSLCACertificateFile redacted

  DirectoryIndex index.html
  DocumentRoot redacted
</VirtualHost>

Мой текущий vhost для блога поддоменов выглядит так:

<VirtualHost *:80>
  ServerAdmin redacted@wemarsh.com
  ServerName  gallivant.wemarsh.com

  DirectoryIndex index.php
  DocumentRoot redacted
</VirtualHost>

Я попытался также определить порт 443 в vhosts для субдомена, но это не сработало.

Можно ли сделать то, что я пытаюсь сделать? У кого-нибудь есть решение? В какой-то момент в будущем ситуация станет более сложной, когда я добавлю на сервер дополнительный IP-адрес и еще один сертификат, поэтому имейте это в виду при внесении предложений.

Я полагаю, что провайдеры виртуального хостинга должны как-то это делать, иначе все сайты, не являющиеся https, сломаются, верно?

(Примечание: я намеренно не связан с версией gallivant https. Последнее, что мне нужно, это то, что Google направляет людей на эту ошибку, поэтому, пожалуйста, избегайте ссылок на них в своих ответах.)

Заранее спасибо!

1 ответ1

0

Вы не можете обойти предупреждение, которое получает пользователь, поскольку вы правы - невозможно определить, как называется домен, пока не станет слишком поздно. Он работает только с TLS (TLS поддерживается в современных браузерах, но не в старых, а также большинство автоматизированных сканеров и API-скриптов также не будут знать TLS).

Единственные исправления, которые вы могли сделать, - это после того, как пользователь прошел страницу предупреждения - проверьте, правильно ли указано имя хоста, а если нет, то перенаправьте на правильный домен не-ssl (или ssl).

Лучшим решением было бы, конечно, получить отдельный ip для SSL, чтобы он не конфликтовал с другими доменами, но, как вы указали, вы не хотите этого делать.

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