Как вы перенаправляете HTTPS в HTTP?

Как вы перенаправляете HTTPS в HTTP? То есть противоположность тому, что (кажется) каждый учит.

У меня есть сервер на HTTPS, за который я заплатил сертификацию SSL, и зеркало, для которого я не имею, и храню его только для экстренных случаев, поэтому оно не заслуживает получения сертификата.

На рабочих столах моего клиента у меня есть НЕКОТОРЫЕ ярлыки, которые указывают на http://production_serverи https://production_server(оба работают). Однако я знаю, что если мой https://mirror_serverрабочий сервер выйдет из строя , то переадресация DNS включится, и те клиенты, у которых есть ярлык «https», будут смотреть (что не работает) и большой толстый красный экран Internet Explorer 7, вызывающий беспокойство для моей компании.

К сожалению, я не могу просто переключить это на уровне клиента. Эти пользователи очень неграмотны на компьютере: и очень вероятно, что увидят ошибки «небезопасности» HTTPS (особенно то, как Firefox 3 и Internet Explorer 7 в настоящее время обрабатывают это: полная остановка, к счастью, но не помогает мне здесь, LOL).

Это очень легко найти решения Apache для HTTP-> HTTPS Перенаправление , но для жизни меня я не могу сделать наоборот.

Идеи?

12.08.2008 00:36:32
Не делай этого ! Перенаправления HTTPS из HTTP чрезвычайно опасны (и на самом деле скоро будут заблокированы всеми браузерами из-за злоупотребления), особенно если это узел через состояние HTTP без вывода сообщений (но то же самое верно, если это делается с помощью javascript), кроме случаев, когда: - (1) есть временная страница парковки HTTPS, предлагающая пользователям перейти по ссылке, активно щелкая по ней; или: - (2) HTTPS перенаправляет на HTTP точно в ТО ЖЕ домен, И перенаправления не изменяют запрошенный тип контента. Разрешение этого в браузерах позволило многим вредоносным программам пройти изоляцию. Такие перенаправления очень обманчивы.
verdy_p 4.10.2018 18:16:35
Это похоже на внутренний сайт, где OP знает, что происходит с ним, и, следовательно, не опасно ... Если бы это был веб-сервер, я бы с вами согласился, но внутренний, только локальный веб-сервер, перенаправление в эта мода не будет проблемой.
Stese 5.11.2018 09:30:35
@verdy_p Я работаю над переадресацией HTTPS на HTTP 302, случай портальных порталов. Можете ли вы указать мне документацию, на которую вы ссылаетесь?
jprusakova 15.02.2019 19:11:49
Для вашего встроенного портала никогда не выполняйте перенаправление HTTPS на HTTP 302, за исключением случаев, когда это точно в тот же домен (даже не в поддомен). А поскольку существует высокий риск раскрытия информации, остерегайтесь токенов сессии и файлов cookie, которые прозрачно передаются при перенаправлении! Вы должны знать, что цели HTTP могут быть подстроены, а информация взята прозрачными вредоносными прокси-серверами и даже вредоносными DNS: ваш клиент может даже не знать, что ваша цель только для HTTP будет недоступна и фактически перейдет в черный список! Поэтому никогда не делайте этого на HTTPS-ссылках, которые содержат частную сессию / куки / запросы.
verdy_p 17.02.2019 12:13:17
Такое перенаправление HTTPS 302 всегда является дырой в безопасности вашего сайта HTTPS. Огромный риск - кража сессий и сбор личных аккаунтов ваших аутентифицированных пользователей. И в любом случае, НИКОГДА не делайте таких перенаправлений для загрузки javascripts или активных мультимедиа: это открытая дверь в сфере HTTPS «песочница». Действительно подумайте о том, чтобы сделать что-то обратное: перенаправить HTTP на HTTPS (особенно на ваш основной портал или статические общедоступные страницы, которым не нужны личные данные / сеансы / куки) и использовать HTTPS для everelse. Если вам когда-нибудь понадобится перейти с HTTPS на HTTP, используйте стандартные ссылки (в разных запросах)
verdy_p 17.02.2019 12:20:09
10 ОТВЕТОВ
РЕШЕНИЕ

Это не было проверено, но я думаю, что это должно работать с использованием mod_rewrite

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}
127
4.07.2011 14:58:29
Как мне заставить его работать (что мне нужно изменить с этого кода на мой домен, чтобы этот код работал)?
Enve 9.01.2013 18:59:09
Enve: просто добавьте в конфигурацию vhost_ssl.conf вашего сайта (или .htaccess в корне сайта). Ничего не нужно менять, он будет динамически использовать одно и то же имя хоста и URL-адрес.
Darren Felton 31.01.2013 19:53:24
Я думаю, что вы также можете поймать строки запроса. Я не уверен, но я думаю, что приведенный выше фрагмент не будет пересылать строки запроса из https в http.
Rustavore 14.05.2013 22:22:12
Как указал Кирон ниже, это не будет работать, если у зеркального сервера нет действующего сертификата. Вы все равно увидите большое красное предупреждение из-за неверного сертификата. Как только вы начинаете использовать https, вы в основном застряли с ним. Будьте готовы платить за это всю оставшуюся жизнь. Если вы перестанете платить, люди, добавившие ссылки https в закладки, не смогут пройти.
Stephen Cheng 9.09.2014 16:47:27
Платить за всю оставшуюся жизнь? Вы по-прежнему можете использовать HTTPS, но смените своего поставщика PKI и получите новые более дешевые сертификаты. Да, вы все равно заплатите несколько долларов, но то же самое относится и к вашему доменному имени и вашему хостингу! Сертификат PKI теперь НЕ дорогой по сравнению с доменными именами и незначителен по сравнению с затратами на хостинг / пропускную способность!
verdy_p 17.02.2019 12:27:17

Имейте в виду, что механизм перезаписи включается только после получения HTTP-запроса - это означает, что вам все равно понадобится сертификат, чтобы клиент мог установить соединение для отправки запроса!

Однако если машина резервного копирования будет иметь такое же имя хоста (что касается клиента), то не должно быть никаких причин, по которым вы не можете использовать тот же сертификат, что и на главном рабочем компьютере.

71
12.08.2008 03:06:10
Как можно преодолеть это ограничение? У меня та же проблема. получение ошибки сертификата из браузера перед перенаправлением.
Sandeep Balagopal 29.11.2016 07:17:57
Было бы неплохо иметь перенаправление назад на HTTP, если есть ошибка сертификата
Jeffrey the Giraffe 14.02.2019 22:37:25
Это полностью побеждает цель иметь HTTPS в первую очередь
FluffyBeing 26.03.2019 21:43:11

Насколько я знаю, простое мета-обновление также работает без ошибок:

<meta http-equiv="refresh" content="0;URL='http://www.yourdomain.com/path'">
-6
3.09.2012 07:06:09
Я бы хотел, чтобы избиратели, находящиеся внизу, должны были оставлять комментарии с объяснением причин, по которым проголосовали против. Лично я не выбрал бы этот ответ, если у вас как разработчика нет доступа к серверу, для которого вы разрабатываете, но у вас есть доступ к странице. Одна из проблем заключается в том, что вам придется жестко задавать каждый путь на каждой странице, чтобы это работало. Если вы можете предположить, что JavaScript включен для ваших важных вариантов использования, вам лучше использовать JavaScript, чтобы перейти на http. Приведенные выше ответы лучше, потому что они не требуют JavaScript, так как они происходят на сервере.
Rustavore 14.05.2013 22:19:19
Просто: потому что htaccess - гораздо лучший вариант, чем этот. Кроме того, это не решит проблему перенаправления протокола https на http, если у вас нет сертификата.
midudev 14.06.2013 08:30:04
Действие должно обрабатываться сервером, а не документом «a», который он может обслуживать.
albal 3.08.2014 12:38:13

Исходя из ответа ejunker, это решение работает для меня не на одном сервере, а в облачной среде

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{ENV:HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
11
24.01.2013 08:32:49
Использование 301 может быть мало опасным. 301 означает постоянное удаление, и я думаю, что переход от https к http временно. Посмотрите этот принятый ответ, чтобы узнать, какие минусы будут для пользователей stackoverflow.com/questions/1393280/…
yusuf tezel 22.07.2019 11:44:03
Постоянное / временное различие 301/302 относится только к поисковым системам.
matthewv789 29.11.2019 08:49:53

Если ни одно из вышеуказанных решений не работает для вас (они не для меня), вот что сработало на моем сервере:

RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [L,R=301]
8
21.02.2013 00:27:08
Часто вы не захотите L,(что означает «Последнее правило»). Если вы используете WordPress или другую CMS, Lфлаг может помешать правильной маршрутизации запроса страницы. Вместо этого используйте:RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301]
Rustavore 14.05.2013 22:20:44

Для тех, кто использует .confфайл.

<VirtualHost *:443>
    ServerName domain.com
    RewriteEngine On
    RewriteCond %{HTTPS} on
    RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}

    SSLEngine on
    SSLCertificateFile /etc/apache2/ssl/domain.crt
    SSLCertificateKeyFile /etc/apache2/ssl/domain.key
    SSLCACertificateFile /etc/apache2/ssl/domain.crt

</VirtualHost>
9
1.12.2015 18:50:39

Лучше избегать использования mod_rewrite, когда вы можете.

В вашем случае я бы заменил переписать на это:

    <If "%{HTTPS} == 'on'" >
            Redirect permanent / http://production_server/
    </If>

<If>Директива доступна только в Apache 2.4+ , как в этом блоге здесь .

2
4.04.2019 23:18:09
В размещенной среде можно проверить версию Apache с помощью/usr/sbin/httpd -v
Serge Stroobandt 5.05.2019 10:56:34

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

RewriteCond %{HTTP:X-Forwarded-Proto} =https
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

и этот определенно работает без прокси в пути:

RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
5
8.03.2017 18:15:46

Ни один из ответов не работает для меня на веб-сайте Wordpress, но следующие работы (это похоже на другие ответы, но есть небольшие изменения)

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
0
12.11.2017 19:27:47
Не используйте такие правила вслепую со всеми REQUEST_URI (это не следует использовать, если в URI есть какие-либо данные формы или идентификаторы файлов cookie / сеансов в метаданных запроса). Используйте его только для статических общедоступных страниц / изображений. Избегайте его полностью для javascripts или активных компонентов (особенно для видеопотоков со сценариями или активных PDF-файлов, если они не подписаны вами цифровой подписью! Все еще невозможно цифровую подпись javascript, сохраняйте их только в безопасном домене).
verdy_p 17.02.2019 12:34:52
Примечание: некоторые форматы изображений активны и пригодны для написания сценариев: например, остерегайтесь SVG. Мы видели атаки на некоторые HTTPS-сайты, загружающие изображения SVG из HTTP (с 302 перенаправлениями сайта), и собираемые вредоносными программами, вставляющими сценарии в содержимое SVG ... В идеале браузеры должны изолировать HTTP-содержимое от HTTPS и поместить его в песочницу (так что CORS также должны применяться ограничения безопасности, даже если они находятся в одном доменном имени ...), поэтому "http: // (домен) / ..." и "https: // (домен) /" следует рассматривать как отдельные домены для CORS (не одного источника), даже если они находятся на одном и том же номере порта TCP.
verdy_p 17.02.2019 12:38:02

это работает для меня.

<VirtualHost *:443>
    ServerName www.example.com
    # ... SSL configuration goes here
    Redirect "https://www.example.com/" "http://www.example.com/"
</VirtualHost>

<VirtualHost *:80>
    ServerName www.example.com
    # ... 
</VirtualHost>

обязательно прослушайте оба порта 80 и 443.

1
3.01.2019 23:55:12