Перенаправить определенных посетителей на https (браузер SNI и системное время в порядке)

Я нашел много постов, касающихся проверки части поддержки браузера SNI, но не связанной с системным временем.

Посадка по умолчанию для моего сайта — http. Теперь я настроил SSL. Но совместимость для меня важнее всего. Безопасность наименее важна. Я хочу автоматически перенаправлять пользователей на https, если я уверен, что они не увидят ошибку (а затем ошибочно полагают, что мой сайт не работает).

Поскольку целевая страница — HTTP, мы можем использовать php или .htacess для обнаружения. В другом месте я видел обсуждение использования php-перенаправлений, что может вызвать проблемы с кнопкой «Назад». (Принудительное использование SSL и обработка браузеров без поддержки SNI)

Помимо поддержки SNI, я также знаю, что если у пользователя неправильно настроено системное время, он может столкнуться с ошибкой на сайте https.

Итак, каков наилучший подход для проверки системного времени SNI +? Любой другой возможный сценарий, где пользователь перенаправлен к https, может столкнуться с ошибками?

================================================== ===================

Обновить:

Загрузка домашней страницы не требует «безопасности». Я думаю, могу ли я сделать быструю проверку, чтобы увидеть, может ли пользователь успешно загрузить объект, например, https://example.com/test.ico , если да, то покажите опцию «Безопасный вход». (Слава Штеффену). После этого действие будет выполнено в https, чтобы предотвратить небезопасную передачу учетных данных.

Если проверка на https не удалась, то пользователь не может войти без https.

  1. Будет ли это работать?
  2. Дополнительный тест определенно будет тормозить скорость загрузки сайта, не так ли

1

Решение

Нет способа обнаружить это на стороне сервера с помощью PHP или .htaccess, потому что, если соединение не удается из-за отсутствия SNI или неправильного системного времени, то оно происходит уже во время рукопожатия SSL. Но часть PHP или .htaccess используется только для части HTTP, то есть только в том случае, если рукопожатие SSL завершено успешно.

Что вы можете попытаться сделать, это включить ресурс https на целевую страницу и посмотреть, будет ли он успешно загружен. Это может быть сделано с помощью изображений, CSS, XHR или аналогичных. Например, вы могли бы сделать это

<img src="https://test-ssl.example.com"onload="redirect_to_https();"onerror="notify_user_about_problem();" />

Если SSL-соединение с вашим сайтом установлено успешно, выполняется обработчик загрузки, и пользователь перенаправляется на сайт https. Если рукопожатие не удается, вместо этого пользователь получает уведомление о проблеме.

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

Но совместимость для меня важнее всего. Безопасность наименее важна.

Я считаю это плохим, но, к сожалению, очень распространенным подходом. Вместо этого я бы рекомендовал вам использовать этот механизм, чтобы пользователь не мог получить доступ ко всем функциям вашего сайта только по протоколу http, но конфиденциальные части должны быть ограничены https. Но вы могли бы использовать этот подход, чтобы подробно информировать пользователя о проблеме и показывать альтернативы, вместо того, чтобы просто вызывать какую-то странную ошибку соединения из-за неудачного рукопожатия SSL.

0

Другие решения

Это не тот ответ, который вы искали и собирались оставить в качестве комментария по этой причине, но затянули надолго, поэтому решили вместо этого ответить:

Хотя замечательно пытаться справиться со всеми своими пользователями, независимо от того, какие у них устаревшие технологии или плохие настройки, в какой-то момент вы должны спросить себя о том, какие усилия вы вкладываете, а не о вознаграждении за несколько дополнительных хитов?

Управление двойным http и https — это административный кошмар, который просто подвергает ваших пользователей с поддержкой https (подавляющее большинство почти на всех сайтах) ненужному риску из-за атак с понижением рейтинга, неспособности сделать файлы cookie безопасными, случайно включая небезопасный контент … и т. Д. С точки зрения SEO, у вас есть два сайта, которыми сложно управлять.

ИМХО, если вы сильно относитесь к пользователям SNI, то платите за выделенный IP, если не переходите только на HTTPS.

совместимость наиболее важна для меня. Безопасность наименее важна

Тогда придерживайтесь HTTP и даже не рассматривайте HTTPS.

Наконец, вы должны помнить, что браузеры заставят вас двигаться дальше достаточно скоро. Например, принудительное использование сертификатов SHA-2 (которые не поддерживаются очень старыми браузерами — по аналогии с SNI) означает, что вам в конечном итоге придется вызывать его один день в старых браузерах. Поэтому любой ответ, который вы здесь придумали, будет недолгим. И это при условии, что вы можете придумать решение, которое будет работать во всех браузерах (немалый вопрос сам по себе!).

0

По вопросам рекламы [email protected]