HTTPS'yi HTTP'ye nasıl yönlendirirsiniz?


166

HTTPS'yi HTTP'ye nasıl yönlendirirsiniz ?. Yani, herkesin (görünüşte) öğrettiklerinin tam tersi.

HTTPS'de bir SSL sertifikası ve bir ayna ödemediğim bir ayna var ve sadece acil durumlar için saklanıyorum, bu yüzden bir sertifika almayı hak etmiyor.

Müşterimin masaüstünde, ( http://production_serverve https://production_serverher ikisi de) işaret eden bazı kısayollar var . Ancak, üretim sunucum çökerse, DNS yönlendirmesi devreye girer ve kısayollarında "https" olan istemcilere https://mirror_server(işe yaramaz) ve büyük bir şişman Internet Explorer 7 kırmızı huzursuzluğuna bakacağını biliyorum. benim şirketim için.

Ne yazık ki, bunu sadece müşteri düzeyinde değiştiremiyorum. Bu kullanıcılar çok bilgisayar okuryazar değildir ve HTTPS "güvensizlik" hatalarını görmekten korkarlar (özellikle Firefox 3 ve Internet Explorer 7'nin günümüzde ele alma şekli: TAM DUR, biraz şükür ama bana burada LOL yardım etmiyor).

Bu var çok kolay bulmak için Apache çözümleri için http-> http yeniden yönlendirme , ama benim yaşam için tam tersini yapamaz.

Fikirler?


2
Böyle yapma ! HTTP'den HTTPS yönlendirmeleri son derece tehlikelidir (ve aslında kötüye kullanım nedeniyle yakında tüm tarayıcılar tarafından engellenecektir), özellikle bu sessiz HTTP durumu aracılığıyla düğüm ise (ancak, javascript tarafından yapılırsa aynıdır): (1) kullanıcıları aktif olarak tıklayarak bir bağlantıyı flört etmeye davet eden geçici bir HTTPS park sayfası var; veya: - (2) HTTPS, tam olarak SAME etki alanında HTTP'ye yönlendirir VE yönlendirmeler, istenen içerik türünü değiştirmez. Tarayıcılarda izin vermek, birçok kötü amaçlı yazılımın izolasyonu geçmesine izin verdi. Bu tür yönlendirmeler çok aldatıcıdır.
verdy_p

4
Bu dahili bir siteye benziyor, burada OP neler olup bittiğini biliyor ve bu yüzden tehlikeli değil ... Bu web'e bakan bir sunucu olsaydı, sana katılırdım, ancak dahili, yerel bir tek web sunucusu, bu moda bir sorun olmazdı.
Stese

@verdy_p HTTPS üzerinde esir portallar durumu olan HTTP 302 yönlendirmelerine çalışıyorum. Beni bahsettiğiniz belgelere yönlendirebilir misiniz?
jprusakova

Sabit portalınız için, hiçbir zaman HTTPS'den HTTP 302'ye yeniden yönlendirme yapmayın; Bilgi ifşası riski yüksek olduğundan, yönlendirme ile şeffaf bir şekilde geçirilen oturum belirteçlerine ve çerezlere dikkat edin! HTTP hedeflerinin değiştirilebileceğini ve bilginin kötü amaçlı yazılım şeffaf proxy'leri ve hatta kötü amaçlı DNS tarafından alınabileceğini bilmelisiniz. Bunu asla özel oturum / çerezler / istekler içeren HTTPS bağlantılarında yapmayın.
verdy_p

Bu tür HTTPS 302 yönlendirmeleri, HTTPS sitenizdeki güvenlik açıklarıdır. Büyük risk, oturumların çalınması ve kimliği doğrulanmış kullanıcılarınızın özel hesaplarının toplanmasıdır. Ve her durumda, javascripts veya aktif multimedya yüklemek için ASLA bu tür yönlendirmeler yapmayın: bu, HTTPS "sanal alan" alanındaki açık bir kapıdır. Bir şeyi tersine çevirmeyi gerçekten düşünün: HTTP'yi HTTPS'ye yönlendirin (özellikle ana portalınız veya özel veri / oturum / çerez gerektirmeyen statik genel sayfalar) ve sonsuza dek HTTPS kullanın. HTTPS'den
HTTP'ye gitmeniz

Yanıtlar:


128

Bu test değil ama mod_rewrite kullanarak çalışması gerektiğini düşünüyorum

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}

1
Nasıl çalıştırabilirim (bu kodun çalışması için bu koddan alan adıma ne değiştirmem gerekir)?
Enve

1
Enve: Sitenizin vhost_ssl.conf yapılandırmasına (veya sitenin kökündeki .htaccess'e) eklemeniz yeterlidir. Hiçbir şeyin değiştirilmesi gerekmez, aynı ana bilgisayar adını ve url yolunu dinamik olarak kullanır.
Darren Felton

1
Ben de sorgu dizeleri yakalamak isteyebilirsiniz düşünüyorum. Emin değilim, ama yukarıdaki snippet https http http sorgu dizeleri iletmez düşünüyorum.
Rustavore

12
Aşağıda Kieron'un işaret ettiği gibi, ayna sunucusunun geçerli bir sertifikası yoksa bu işe yaramaz. Geçersiz sertifika nedeniyle hala büyük bir kırmızı uyarı göreceksiniz. Https kullanmaya başladığınızda, temelde onunla sıkışıp kalırsınız. Hayatınızın geri kalanında bunun için ödeme yapmaya hazır olun. Ödemeyi durdurursanız, https bağlantılarına yer işareti koyan kişiler gelemez.
Stephen Cheng

2
Hayatının geri kalanını mı ödüyorsun? Yine de HTTPS kullanabilir, ancak PKI sağlayıcınızı değiştirebilir ve yeni daha ucuz sertifikalar alabilirsiniz. Yine de birkaç kuruş ödeyeceksiniz, ancak aynı alan adı ve barındırma için de geçerlidir! Bir PKI sertifikası artık alan adlarına göre pahalı DEĞİLDİR ve barındırma / bant genişliği maliyetlerine kıyasla önemsizdir!
verdy_p

71

Yeniden yazma motorunun yalnızca HTTP isteği alındıktan sonra başladığını unutmayın; bu, istemcinin isteği göndermek için bağlantıyı kurması için yine de bir sertifikaya ihtiyacınız olacaktır!

Ancak, yedek makine aynı ana bilgisayar adına sahip görünüyorsa (istemci ile ilgili olarak), ana üretim makinesiyle aynı sertifikayı kullanamamanız için hiçbir neden olmamalıdır.


1
Bu sınırlamanın üstesinden nasıl gelinebilir? Aynı sorunu yaşıyorum. yönlendirmeden önce tarayıcıdan sertifika hatası alıyorum.
Sandeep Balagopal

Sertifika hatası varsa tekrar HTTP'ye yönlendirmek iyi olurdu
Jeffrey Zürafa

Bu, ilk etapta HTTPS'ye sahip olma amacını tamamen yendi
FluffyBeing 26:19

12

Ejuner'in cevabına göre, bu benim için çalışan çözümdür, tek bir sunucuda değil, bir bulut ortamında

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{ENV:HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

301 kullanmak biraz tehlikeli olabilir. 301 kalıcı olarak kaldırılmış anlamına gelir ve sanırım https'den http'ye geçiş geçici. Kullanıcılar için eksileri bu kabul edilen cevaba bakın stackoverflow.com/questions/1393280/…
yusuf tezel

301/302 kalıcı / geçici ayrım yalnızca arama motorlarıyla ilgilidir.
matthewv789

9

.confDosya kullananlar için .

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

8

Yukarıdaki çözümlerden hiçbiri sizin için işe yaramazsa (benim için işe yaramadılar) işte sunucumda işe yarayan şey:

RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [L,R=301]

6
Çoğu zaman, istemezsiniz L,("Son kural" anlamına gelir). Wordpress veya başka bir CMS kullanıyorsanız, Lbayrak sayfa isteğinin düzgün bir şekilde yönlendirilmesini engelleyebilir. Bunun yerine kullanın:RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301]
Rustavore

5

yukarıdakilerin hepsi cloudflare kullandığımda işe yaramadı, bu benim için çalıştı:

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

ve bu kesinlikle proxy olmadan çalışır:

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

3

Mümkün olduğunda mod_rewrite kullanmaktan kaçınmak daha iyidir.

Sizin durumunuzda yeniden yazma ile bunun yerine:

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

<If>Yönerge bu uyarınca 2.4+ Apache yalnızca burada blog .


Barındırılan bir ortamda, Apache sürümünü kullanarak kontrol edebilirsiniz/usr/sbin/httpd -v
Serge Stroobandt

1

bu benim için çalışıyor.

<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 ve 443 numaralı bağlantı noktalarını dinlediğinizden emin olun.


0

Cevabın hiçbiri Wordpress web sitesinde benim için çalışmıyor, ancak aşağıdaki çalışmaları yapıyor (diğer cevaplara benzer, ancak küçük bir değişiklik var)

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Bu kuralları tüm REQUEST_URI ile körü körüne kullanmayın (URI'de herhangi bir form verisi veya istek meta verilerinde çerez / oturum kimliği varsa bu kullanılmamalıdır). Yalnızca statik genel sayfalar / resimler için kullanın. Javascripts veya aktif bileşenler için tamamen kaçının (sizin tarafınızdan dijital olarak imzalanmadıkça özellikle kodlanabilir video akışları veya aktif PDF'ler! JavaScript'leri dijital olarak imzalamak, yalnızca güvenli alanınızda saklamak hala mümkün değildir).
verdy_p

Not: bazı görüntü formatları aktif ve yazılabilir: örneğin SVG'ye dikkat edin. HTTP'den SVG görüntüleri yükleyen bazı HTTPS web sitelerine saldırılar gördük (sitenin 302 yönlendirmeleriyle) ve SVG içeriklerine komut dosyası ekleyen kötü amaçlı yazılımlar tarafından toplandık ... İdeal olarak tarayıcılar HTTP alt içeriklerini HTTPS'den ayırmalı ve bir sanal alana yerleştirmelidir (böylece CORS güvenlik kısıtlamaları da aynı etki alanı adında olsa bile uygulanmalıdır ...) bu nedenle "http: // (etki alanı) / ..." ve "https: // (etki alanı) /" için ayrı etki alanları olarak düşünülmelidir Aynı TCP bağlantı noktası numarasında olsalar bile CORS (aynı kaynaktan değil).
verdy_p

@verdy_p, "sitenin 302 yönlendirmeleriyle" tam olarak ne demek istiyorsun? Bu HTTP kaynak isteğinden yararlanmak için önce sunucu sitesine (veya TCP / IP düzeyindeki katılımcı düğümlerine (DNS sunucuları, yönlendiriciler gibi) sahip olmanız gerekir, değil mi?
Sz.

Şart değil. Bir etki alanındaki HTTPS güvenliyken aynı etki alanındaki HTTP olmayacak (istismarlar, IP veya yönlendiricileri veya DNS sunucularını kontrol etmeyi gerektirmez; DNSSEC kullanırken bile istismarlar, HTTPS olmadan güvenli bir şekilde algılanamayan IP kimlik sahtekarlığını kullanabilir güvenli oturumlar). Bu yüzden bir HTTPS sitesinin görüntüleri HTTP ile sunmadan (aynı etki alanında bile) barındırması gerektiğini (etkinleştirme tıklaması veya bu güvenli olmayan görüntüleri maskeleme gerektiren bazı tarayıcılarda varsayılan olarak reddedilir) barındırmasını sağlarım. Karışık HTTPS / HTTP yasaklanmalıdır: site HTTP bölümlerinde (örn. Parça pikselleri) saldırıya açıktır.
verdy_p

-6

Bildiğim kadarıyla basit bir meta yenileme, hatalara neden olmadan da çalışır:

<meta http-equiv="refresh" content="0;URL='http://www.yourdomain.com/path'">

12
Aşağı oy verenlerin aşağı oylama nedenlerini açıklayan yorumlar bırakmaları istenecek. Kişisel olarak, bir geliştirici olarak geliştirdiğiniz sunucuya erişiminiz yoksa, ancak sayfaya erişiminiz yoksa bu yanıtı seçmezdim. Bir sorun, bunun çalışması için her sayfadaki her yolu kodlamanız gerekmesidir. Önemli kullanım durumlarınız için JavaScript'in etkin olduğunu varsayabilirseniz, http'ye geçmek için JavaScript'i kullanmanız daha iyi olur. Yukarıdaki yanıtlar daha iyidir çünkü sunucuda oldukları için javascript gerektirmezler.
Rustavore

2
Basitçe: htaccess bundan daha iyi bir seçenek olduğu için. Ayrıca, sertifikanız yoksa https protokolünü http'ye yönlendirmek için sorunu çözmez.
midudev

1
Eylem, sunabileceği 'a' belgesi tarafından değil, sunucu tarafından işlenmelidir.
albal
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.