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

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

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

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

К сожалению, я не могу просто переключить это на уровне клиента. Эти пользователи очень неграмотны в отношении компьютеров: и очень вероятно, что они испугаются, увидев ошибки "незащищенности" HTTPS (особенно то, как Firefox 3 и Internet Explorer 7 обрабатывают их в настоящее время: ПОЛНАЯ ОСТАНОВКА, к счастью, но не помогает мне здесь LOL).

Это очень просто чтобы найти Решения Apache для http://www.google.com/search?q=https+redirection&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-США:официальный&client=firefox-a, но, хоть убей, я не могу сделать наоборот.

Идеи?


person mauriciopastrana    schedule 12.08.2008    source источник
comment
Не делай этого ! Перенаправления HTTPS из HTTP чрезвычайно опасны (и фактически будут вскоре заблокированы всеми браузерами из-за злоупотреблений), особенно, если это узел через молчаливый статус HTTP (но то же самое верно, если это делается с помощью javascript), если только одно из них: - (1) есть временная страница парковки HTTPS, предлагающая пользователям переходить по ссылке, активно щелкая по ней; или: - (2) HTTPS перенаправляет на HTTP точно в ЖЕ домен, И перенаправления не меняют запрошенный тип контента. Разрешение этого в браузерах позволило многим вредоносным программам пройти изоляцию. Такие перенаправления очень обманчивы.   -  person verdy_p    schedule 04.10.2018
comment
Это похоже на внутренний сайт, где OP знает, что с ним происходит, и, следовательно, не опасно ... Если бы это был веб-сервер, я бы с вами согласился, но внутренний, только локальный веб-сервер, перенаправление в эта мода не будет проблемой.   -  person Stese    schedule 05.11.2018
comment
@verdy_p Я работаю над переадресацией HTTPS на HTTP 302, в случае связанных порталов. Можете ли вы указать мне на документацию, на которую вы ссылаетесь?   -  person jprusakova    schedule 15.02.2019
comment
Для вашего адаптивного портала никогда не выполняйте перенаправление HTTPS на HTTP 302, за исключением случаев, когда это точно в тот же домен (даже не субдомен). А поскольку существует высокий риск раскрытия информации, остерегайтесь токенов сеанса и файлов cookie, передаваемых прозрачно с перенаправлением! Вы должны знать, что цели HTTP могут быть настроены, а информация получена прозрачными для вредоносных программ прокси-серверами и даже вредоносным DNS: ваш хранитель может даже не знать, что ваша цель, предназначенная только для HTTP, будет недоступна и фактически попадет в черную шляпу! Так что никогда не делайте этого для HTTPS-ссылок, содержащих частные сеансы / файлы cookie / запросы.   -  person verdy_p    schedule 17.02.2019
comment
Такое перенаправление HTTPS 302 всегда является дырой в безопасности вашего HTTPS-сайта. Огромный риск заключается в том, что сеансы будут украдены, а личные учетные записи ваших аутентифицированных пользователей будут извлечены. И в любом случае НИКОГДА не выполняйте такие перенаправления для загрузки javascripts или активного мультимедиа: это открытая дверь в область песочницы HTTPS. На самом деле подумайте о том, чтобы сделать что-то обратное: перенаправить HTTP на HTTPS (особенно на ваш основной портал или статические общедоступные страницы, которым не нужны личные данные / сеансы / файлы cookie) и использовать HTTPS для everelse. Если вам когда-нибудь понадобится перейти с HTTPS на HTTP, используйте стандартные ссылки (в отдельных запросах)   -  person verdy_p    schedule 17.02.2019


Ответы (11)


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

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}
person ejunker    schedule 12.08.2008
comment
Как мне заставить его работать (что мне нужно изменить с этого кода на мой домен, чтобы этот код работал)? - person Enve; 09.01.2013
comment
Enve: просто добавьте в конфигурацию вашего сайта vhost_ssl.conf (или .htaccess в корне сайта). Ничего не нужно менять, он будет динамически использовать то же имя хоста и URL-адрес. - person Darren Felton; 31.01.2013
comment
Я думаю, вы также можете перехватить строки запроса. Я не уверен, но думаю, что приведенный выше фрагмент не будет пересылать строки запроса с https на http. - person Rustavore; 15.05.2013
comment
Хотя это работает, для Apache это кажется неправильным (http://httpd.apache.org/docs/current/rewrite/avoid.html) Похоже, вместо этого вы должны использовать псевдоним мода. - person Jackie; 10.04.2014
comment
Как указывает Кирон ниже, это не сработает, если на зеркальном сервере нет действующего сертификата. Вы все равно увидите большое красное предупреждение из-за недействительного сертификата. Как только вы начнете использовать https, вы в основном застрянете на нем. Будьте готовы платить за это всю оставшуюся жизнь. Если вы перестанете платить, люди, добавившие ссылки https, не смогут пройти через них. - person Stephen Cheng; 09.09.2014
comment
Можно ли сделать это, избегая перезаписи, согласно рекомендации Apache на странице http://httpd.apache.org/docs/current/rewrite/avoid.html? - person Gaia; 23.09.2014
comment
@Gaia Вот версия перенаправления по рекомендации Apache Redirect "/" "http://domain_to_redirect_to.com/" - person Poly Bug; 20.10.2015
comment
Мне это нужно, но в сочетании только с dev. хост для всех моих доменов. Другими словами, для https://www.* я буду использовать SSL, а для https://dev.* мне нужно http://dev.*, потому что у меня нет сертификата SSL, и мне лучше протестировать без предупреждений. Как ? - person Meloman; 23.05.2016
comment
Если бы я поместил это предложенное решение в .htaccess, помещенный в определенную папку под www apache, и установил AllowOverride All в default_site.conf, это сработало бы? - person Ciasto piekarz; 04.01.2017
comment
Платите до конца своей жизни? Вы по-прежнему можете использовать HTTPS, но смените поставщика PKI и получите новые более дешевые сертификаты. Да, вы все равно заплатите несколько долларов, но то же самое верно для вашего доменного имени и вашего хостинга! Сертификат PKI теперь НЕ стоит дорого по сравнению с доменными именами и незначителен по сравнению с затратами на хостинг / пропускную способность! - person verdy_p; 17.02.2019
comment
Примечание: если вам нужны зеркала, создайте поддомены в своем основном домене, по одному поддомену на зеркало, купите сертификат PKI для каждого из них и дайте указание своим зеркалам принимать и обрабатывать запросы для вашего поддомена. То же самое можно сказать, если вы используете коммерческий CDN (например, Amazon): настройте его для использования вашего субдомена и принимайте запросы только от вашего субдомена, а не субдомена CDN по умолчанию: вы сохраните полный контроль над тем, что происходит. - person verdy_p; 17.02.2019

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

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

person Kieron    schedule 12.08.2008
comment
Как можно преодолеть это ограничение? У меня такая же проблема. получение ошибки сертификата из браузера перед перенаправлением. - person Sandeep Balagopal; 29.11.2016
comment
Было бы неплохо иметь перенаправление обратно на HTTP, если есть ошибка сертификата - person Maciek Semik; 15.02.2019
comment
Это полностью противоречит цели использования HTTPS в первую очередь. - person FluffyBeing; 27.03.2019

Основываясь на ответе ejunker, это решение работает для меня не на одном сервере, а в облачной среде.

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{ENV:HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
person antoniom    schedule 24.01.2013
comment
Использование 301 может быть немного опасным. 301 означает постоянное удаление, и я предполагаю, что переход с https на http временно. См. Этот принятый ответ, чтобы узнать, какие минусы будут для пользователей stackoverflow.com/questions/1393280/ - person yusuf tezel; 22.07.2019
comment
Различие между постоянным и временным 301/302 актуально только для поисковых систем. - person matthewv789; 29.11.2019

Для тех, кто использует .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>
person Rick    schedule 01.12.2015

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

RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [L,R=301]
person rg88    schedule 21.02.2013
comment
Часто вам не нужно L, (что означает последнее правило). Если вы используете wordpress или другую CMS, флаг L может помешать правильной маршрутизации запроса страницы. Вместо этого используйте: RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301] - person Rustavore; 15.05.2013

все вышеперечисленное не сработало, когда я использовал 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]
person mikulabc    schedule 08.03.2017

По возможности лучше избегать использования mod_rewrite.

В вашем случае я бы заменил Rewrite следующим:

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

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

person sys0dm1n    schedule 22.08.2016
comment
В размещенной среде можно проверить версию Apache с помощью /usr/sbin/httpd -v - person Serge Stroobandt; 05.05.2019

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

<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.

person jaxarroyo    schedule 03.01.2019

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

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
person Yuseferi    schedule 12.11.2017
comment
Не используйте такие правила вслепую со всеми REQUEST_URI (это не следует использовать, если в URI есть какие-либо данные формы или идентификаторы файлов cookie / сеансов в метаданных запроса). Используйте его только для статических публичных страниц / изображений. Полностью избегайте этого для javascripts или активных компонентов (особенно для видеопотоков с возможностью создания сценариев или активных PDF-файлов, если они не подписаны вами цифровой подписью! По-прежнему невозможно использовать цифровую подпись для javascripts, храните их только в своем защищенном домене). - person verdy_p; 17.02.2019
comment
Примечание: некоторые форматы изображений активны и поддерживают сценарии: например, будьте осторожны с SVG. Мы видели атаки на некоторые веб-сайты HTTPS, загружающие изображения SVG из HTTP (с 302 редиректами сайта) и собираемые вредоносными программами, вставляющими скрипты в содержимое SVG ... В идеале браузеры должны изолировать субконтент HTTP от HTTPS и помещать его в песочницу (так что CORS ограничения безопасности также должны применяться, даже если он находится в том же доменном имени ...), поэтому http: // (домен) / ... и https: // (домен) / должны считаться отдельными доменами для CORS (а не один и тот же источник), даже если они находятся на одном и том же номере порта TCP. - person verdy_p; 17.02.2019
comment
@verdy_p, что именно вы имеете в виду под 302 редиректами сайта? Вы должны сначала владеть сайтом-сервером (или узлами-участниками на уровне TCP / IP, такими как DNS-серверы, маршрутизаторы), чтобы использовать эти запросы ресурсов HTTP, верно? - person Sz.; 15.05.2020
comment
Не обязательно. HTTPS в домене будет безопасным, в то время как HTTP в том же домене не будет (эксплойты не требуют управления IP-адресом, маршрутизаторами или DNS-серверами даже при использовании DNSSEC; эксплойты могут просто использовать IP-спуфинг, который невозможно безопасно обнаружить без HTTPS на безопасные сеансы). Поэтому я утверждаю, что сайт HTTPS должен размещать изображения (даже в том же домене), не обслуживая их с помощью HTTP (это даже запрещено по умолчанию в некоторых браузерах, которые требуют щелчка активации или маскировки этих небезопасных изображений). Смешанный протокол HTTPS / HTTP должен быть запрещен: сайт может атаковать его части HTTP (например, пиксели трека). - person verdy_p; 16.05.2020

Если вы ищете ответ, в котором вы можете перенаправить определенные URL-адреса на http, обновите свой htaccess, как показано ниже.

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{THE_REQUEST} !/(home/panel/videos|user/profile) [NC] # Multiple urls
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTPS} on
RewriteCond %{THE_REQUEST} /(home/panel/videos|user/profile) [NC] # Multiple urls
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

У меня сработало :)

person Khan Sharukh    schedule 18.02.2021

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

<meta http-equiv="refresh" content="0;URL='http://www.yourdomain.com/path'">
person RobinUS2    schedule 03.09.2012
comment
Я хочу, чтобы проголосовавшие против проголосовали против, оставив комментарии, объясняющие причины голосования против. Лично я бы не выбрал этот ответ, если у вас, как у разработчика, нет доступа к серверу, для которого вы разрабатываете, но у вас есть доступ к странице. Одна из проблем заключается в том, что вам придется жестко запрограммировать каждый путь на каждой странице, чтобы это работало. Если вы можете предположить, что JavaScript включен для ваших важных случаев использования, вам лучше использовать JavaScript для перехода на http. Приведенные выше ответы лучше, потому что они не требуют javascript, поскольку они происходят на сервере. - person Rustavore; 15.05.2013
comment
Проще говоря: потому что htaccess - гораздо лучший вариант. Кроме того, это не решит проблему перенаправления протокола https на http, если у вас нет сертификата. - person midudev; 14.06.2013
comment
Действие должно обрабатываться сервером, а не документом, который он может обслуживать. - person albal; 03.08.2014
comment
Чтобы это работало, вам понадобятся две версии страницы или какой-либо способ предотвратить обновление, если вы перешли на страницу через http. В противном случае вы создали цикл обновления: yourdomain.com/path - ›yourdomain.com/path -› yourdomain.com/path -› ... и т. д. - person Dave Burton; 01.03.2021