आप HTTPS को HTTP पर रीडायरेक्ट कैसे करते हैं?


166

आप HTTPS को HTTP पर रीडायरेक्ट कैसे करते हैं? अर्थात्, (जो प्रतीत होता है) हर किसी को सिखाता है।

मेरे पास HTTPS पर एक सर्वर है जिसके लिए मैंने एक SSL प्रमाणन का भुगतान किया है और एक दर्पण जिसके लिए मैंने नहीं किया है और केवल आपात स्थितियों के लिए आसपास रहता है, इसलिए इसके लिए प्रमाणीकरण प्राप्त करने का योग्यता नहीं है।

मेरे क्लाइंट के डेस्कटॉप पर मेरे पास कुछ शॉर्टकट हैं जो ( http://production_serverऔर https://production_serverदोनों काम) को इंगित करते हैं। हालाँकि, मुझे पता है कि अगर मेरा प्रोडक्शन सर्वर नीचे चला जाता है, तो DNS फॉरवर्डिंग किक करता है और उन क्लाइंट्स, जिनके शॉर्टकट पर "https" है https://mirror_server(जो काम नहीं करता है) को घूरता रहेगा और एक बड़ा मोटा इंटरनेट एक्सप्लोरर 7 लाल स्क्रीन की बेचैनी मेरी कंपनी के लिए।

दुर्भाग्य से, मैं इसे क्लाइंट स्तर पर नहीं बदल सकता। ये उपयोगकर्ता बहुत कंप्यूटर अनपढ़ हैं: और HTTPS "असुरक्षा" त्रुटियों (विशेष रूप से फ़ायरफ़ॉक्स 3 और इंटरनेट एक्सप्लोरर 7 आजकल इसे संभालते हैं: FULL STOP, इस तरह का धन्यवाद, लेकिन यहाँ LOL की मदद नहीं करना) को देखने से बहुत अधिक संभावना है।

यह बहुत आसान लगता है अपाचे समाधान के लिए http-> https पुनर्निर्देशन , लेकिन मेरे जीवन के लिए मैं विपरीत नहीं कर सकते।

विचार?


2
ऐसा मत करो ! HTTP से HTTPS पुनर्निर्देशन बेहद खतरनाक है (और वास्तव में दुरुपयोग के कारण सभी ब्राउज़रों द्वारा जल्द ही अवरुद्ध कर दिया जाएगा), जाहिर है अगर यह चुप HTTP स्थिति के माध्यम से नोड है (लेकिन यह सच है अगर यह जावास्क्रिप्ट द्वारा किया जाता है), जब तक कि या तो: - (1) एक क्षणिक HTTPS पार्किंग पृष्ठ है जो उपयोगकर्ताओं को सक्रिय रूप से क्लिक करके लिंक लिंक करने के लिए आमंत्रित करता है; या: - (2) HTTPS HTTP पर समान डोमेन पर रीडायरेक्ट करता है और रीडायरेक्ट अनुरोधित सामग्री प्रकार को नहीं बदलता है। ब्राउज़रों में इसकी अनुमति देने से बहुत से लोगों को अलगाव से गुजरने की अनुमति मिली है। इस तरह के पुनर्निर्देश बहुत भ्रामक हैं।
verdy_p

4
यह एक आंतरिक साइट की तरह दिखता है, जहां ओपी जानता है कि उसके साथ क्या हो रहा है, और इस तरह खतरनाक नहीं है ... यदि यह एक वेब का सामना करने वाला सर्वर था, तो मैं आपसे सहमत होगा, लेकिन एक आंतरिक, स्थानीय केवल वेबसर्वर, एक पुनर्निर्देश यह फैशन कोई मुद्दा नहीं होगा।
9

@verdy_p मैं HTTPS से HTTP 302 रीडायरेक्ट पर काम कर रहा हूं, कैप्टिव पोर्टल्स का मामला। क्या आप मुझे उस दस्तावेज़ीकरण की ओर संकेत कर सकते हैं जिसका आप उल्लेख कर रहे हैं?
jprusakova

अपने कैप्टिव पोर्टल के लिए, कभी भी किसी भी HTTPS को HTTP 302 रीडायरेक्ट पर न करें, सिवाय इसके कि यह बिल्कुल उसी डोमेन के लिए है (एक उपडोमेन भी नहीं)। और जैसा कि जानकारी के प्रकटीकरण का एक उच्च जोखिम है, सत्र टोकन और कुकीज़ से सावधान रहें जो पारदर्शी रूप से पुनर्निर्देशित हो गए हैं! आपको पता होना चाहिए कि HTTP टारगेट को मालवेयर ट्रांसपेरेंट और यहाँ तक कि दुर्भावनापूर्ण DNS द्वारा भी लिया जा सकता है। इसलिए HTTPS लिंक पर कभी भी ऐसा न करें जिसमें निजी सत्र / कुकीज़ / अनुरोध शामिल हों।
verdy_p

इस तरह के HTTPS 302 रीडायरेक्ट आपकी HTTPS साइट में हमेशा सुरक्षा छेद होते हैं। भारी जोखिम सत्रों को चुराया जा रहा है और आपके प्रमाणित उपयोगकर्ताओं के पास उनके निजी खाते कटे हुए हैं। और सभी मामलों में, कभी भी जावास्क्रिप्ट, या सक्रिय मल्टीमीडिया लोड करने के लिए इस तरह के रीडायरेक्ट नहीं होते हैं: यह HTTPS "सैंडबॉक्स" क्षेत्र में एक खुला दरवाजा है। वास्तव में कुछ उल्टा करने पर विचार करें: HTTP को HTTPS (विशेष रूप से आपके मुख्य पोर्टल या स्थैतिक सार्वजनिक पृष्ठों को निजी डेटा / सत्र / कुकीज़) की आवश्यकता नहीं है और हमेशा के लिए HTTPS का उपयोग करें। यदि आपको कभी भी एचटीटीपीएस से एचटीटीपी प्राप्त करने की आवश्यकता है, तो मानक लिंक का उपयोग करें (अलग-अलग अनुरोधों में)
verdy_p

जवाबों:


128

यह परीक्षण नहीं किया गया है लेकिन मुझे लगता है कि यह mod_rewrite का उपयोग करके काम करना चाहिए

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

1
मैं इसे कैसे काम कर सकता हूं (इस कोड को काम करने के लिए मुझे इस कोड से अपने डोमेन में क्या बदलना होगा)?
१।

1
Enve: बस अपनी साइट के vhost_ssl.conf कॉन्फ़िगरेशन (या साइट के मूल में .htaccess) में जोड़ें। कुछ भी बदलने की जरूरत नहीं है यह गतिशील रूप से एक ही मेजबान नाम और यूआरएल पथ का उपयोग करेगा।
डैरेन फेल्टन

1
मुझे लगता है कि आप क्वेरी स्ट्रिंग को भी पकड़ना चाहते हैं। मुझे यकीन नहीं है, लेकिन मुझे लगता है कि उपरोक्त स्निपेट https से http तक क्वेरी स्ट्रिंग को आगे नहीं बढ़ाएगा।
रुस्तवोर

12
जैसा कि नीचे किरोन ने बताया है, यह काम नहीं करेगा यदि दर्पण सर्वर के पास कोई वैध प्रमाणपत्र नहीं है। अमान्य प्रमाणपत्र के कारण आपको अभी भी एक बड़ी लाल चेतावनी दिखाई देगी। एक बार जब आप https का उपयोग करना शुरू करते हैं, तो आप मूल रूप से इसके साथ फंस जाते हैं। जीवन भर इसके लिए भुगतान करने के लिए तैयार रहें। यदि आप भुगतान करना बंद कर देते हैं, तो https लिंक को बुकमार्क करने वाले लोग इसके माध्यम से नहीं आ पाएंगे।
स्टीफन चेंग

2
अपने जीवन के शेष के लिए भुगतान? आप अभी भी HTTPS का उपयोग कर सकते हैं लेकिन अपने PKI प्रदाता को बदल सकते हैं और नए सस्ते प्रमाण पत्र प्राप्त कर सकते हैं। आप अभी भी कुछ रुपये का भुगतान करेंगे, लेकिन आपके डोमेन नाम और आपके होस्टिंग के लिए भी यही सही है! एक PKI प्रमाणपत्र अब डोमेन नामों की तुलना में महंगा नहीं है, और होस्टिंग / बैंडविड्थ लागत की तुलना में महत्वहीन है!
verdy_p

71

ध्यान रखें कि HTTP रिक्वेस्ट प्राप्त होने के बाद केवल रिवाइटर इंजन ही किक करता है - जिसका अर्थ है कि क्लाइंट को अनुरोध भेजने के लिए कनेक्शन सेट करने के लिए आपको प्रमाणपत्र की आवश्यकता होगी!

हालाँकि, यदि बैकअप मशीन में एक ही होस्टनाम (जहाँ तक ग्राहक का संबंध है) दिखाई देगा, तो कोई कारण नहीं होना चाहिए कि आप मुख्य उत्पादन मशीन के समान प्रमाणपत्र का उपयोग नहीं कर सकते।


1
इस सीमा को कैसे दूर किया जा सकता है? मुझे भी वही समस्या हो रही है। रीडायरेक्ट से पहले ब्राउज़र से प्रमाणित त्रुटि प्राप्त करना।
संदीप बालगोपाल

प्रमाणपत्र त्रुटि होने पर HTTP पर पुनर्निर्देशित करना अच्छा होगा
जेफ्री जिराफ

यह पूरी तरह से HTTPS होने के उद्देश्य को पूरी तरह से हरा देता है
FluffyBeing

12

Ejunker के जवाब के आधार पर, यह मेरे लिए समाधान काम कर रहे है, एक एकल सर्वर पर नहीं है, लेकिन एक पर बादल वातावरण

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

301 का उपयोग करना थोड़ा खतरनाक हो सकता है। 301 का अर्थ है अनुमति से हटा दिया गया है और मुझे लगता है कि https से http तक जाना अस्थायी है। यूजर्स stackoverflow.com/questions/1393280/…
yusuf tezel

301/302 स्थायी / अस्थायी अंतर केवल खोज इंजन के लिए प्रासंगिक है।
मैथ्यू 789

9

उन लोगों के लिए जो एक .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>

8

यदि उपरोक्त समाधानों में से कोई भी आपके लिए काम नहीं करता है (वे मेरे लिए नहीं थे) तो यहां मेरे सर्वर पर काम किया गया है:

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

6
अक्सर बार, आप L,("अंतिम नियम") का अर्थ नहीं चाहेंगे । यदि आप Wordpress या किसी अन्य CMS का उपयोग कर रहे हैं, तो Lध्वज पृष्ठ अनुरोध को ठीक से रूट होने से रोक सकता है। इसके बजाय उपयोग करें:RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301]
रुस्तवोर

5

जब मैंने क्लाउडफ़ेयर का उपयोग किया था तब उपरोक्त सभी काम नहीं किया था, यह मेरे लिए काम करता था:

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]

3

जब आप कर सकते हैं तो mod_rewrite का उपयोग करने से बचना बेहतर है।

आपके मामले में मैं इसके साथ रिवायत की जगह लूंगा:

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

<If>निर्देश के अनुसार इस 2.4+ अपाचे में ही उपलब्ध है ब्लॉग यहाँ


एक होस्ट किए गए वातावरण में, कोई भी अपाचे के संस्करण की जांच कर सकता है/usr/sbin/httpd -v
सर्ज स्ट्रोबोबंड

1

यह मेरे लिए काम करता है।

<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 दोनों बंदरगाहों को सुनना सुनिश्चित करें।


0

कोई भी जवाब मेरे लिए वर्डप्रेस वेबसाइट पर काम नहीं करता है, लेकिन निम्नलिखित काम करता है (यह अन्य उत्तरों के समान है लेकिन थोड़ा बदलाव है)

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

सभी REQUEST_URI के साथ इस तरह के नियमों का अंधाधुंध उपयोग न करें (यदि यूआरआरआई में कोई फॉर्म डेटा या अनुरोध मेटाडेटा में कुकीज़ / सत्र आईडी नहीं हैं तो इसका उपयोग नहीं किया जाना चाहिए)। इसका उपयोग केवल स्थैतिक सार्वजनिक पृष्ठों / चित्रों के लिए करें। इसे पूरी तरह से javascripts या सक्रिय घटकों (विशेष रूप से स्क्रिप्ट करने योग्य वीडियो स्ट्रीम या सक्रिय PDF के लिए तब तक बचें जब तक कि वे आपके द्वारा डिजिटल रूप से हस्ताक्षरित न हों! यह अभी भी डिजिटल रूप से javascripts पर हस्ताक्षर करने के लिए संभव नहीं है, उन्हें केवल अपने सुरक्षित डोमेन पर रखें)।
verdy_p

नोट: कुछ छवि प्रारूप सक्रिय और स्क्रिप्ट योग्य हैं: उदाहरण के लिए SVG के बारे में सावधान रहें। हमने HTTP (साइट के 302 रीडायरेक्ट के साथ) से SVG इमेज लोड करने वाली कुछ HTTPS वेबसाइटों पर हमले देखे हैं, और SVG कंटेंट में स्क्रिप्ट डालने वाले मैलेवियर्स द्वारा कटाई की गई ... आदर्श रूप से ब्राउज़रों को HTTP सब-कॉन्टेंट्स को HTTPS से अलग करना चाहिए और इसे सैंडबॉक्स (इसलिए CORS) में रखना चाहिए। सुरक्षा प्रतिबंध भी लागू होना चाहिए, भले ही यह एक ही डोमेन नाम में हो ...) इसलिए "http: // (डोमेन) / ..." और "https: // (डोमेन) /" को अलग डोमेन माना जाता है CORS (समान उत्पत्ति नहीं) भले ही वे एक ही TCP पोर्ट नंबर पर हों।
verdy_p

@verdy_p, "साइट के 302 पुनर्निर्देशन के साथ" से आपका वास्तव में क्या मतलब है? आपको उन HTTP रिसोर्स रिक्वेस्ट का फायदा उठाने के लिए पहले सर्वर-साइट (या टीसीपी / आईपी लेवल पर DNS सर्वर, राउटर की तरह) नोड्स का मालिक होना चाहिए?
एस.जे.

जरुरी नहीं। किसी डोमेन पर HTTPS सुरक्षित रहेगा जबकि उसी डोमेन पर HTTP नहीं होगा (शोषण के लिए DNSSEC का उपयोग करते समय भी IP या राउटर, या DNS सर्वर को नियंत्रित करने की आवश्यकता नहीं है; शोषण सिर्फ IP स्पूफिंग का उपयोग कर सकता है, जो HTTPS के बिना सुरक्षित रूप से नहीं किया जा सकता है; सुरक्षित सत्र)। इसलिए मैं यह सुनिश्चित करता हूं कि एचटीटीपीएस साइट को HTTP के साथ सेवा न करके छवियों (उसी डोमेन पर भी) को होस्ट करना चाहिए (यह कुछ ब्राउज़रों में डिफ़ॉल्ट रूप से भी इनकार कर दिया जाता है, जिन्हें सक्रियण क्लिक की आवश्यकता होती है या उन असुरक्षित चित्रों को मास्क करना पड़ता है)। मिश्रित HTTPS / HTTP को प्रतिबंधित किया जाना चाहिए: साइट अपने HTTP भागों (जैसे ट्रैक पिक्सेल) पर हमला करने योग्य है।
वर्दी_प

-6

जहाँ तक मुझे पता है कि एक साधारण मेटा रिफ्रेश भी त्रुटियों के बिना काम करता है:

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

12
काश मतदाताओं को नीचे वोटों के कारणों की व्याख्या करने वाली टिप्पणियों को छोड़ने की आवश्यकता होती। व्यक्तिगत रूप से, मैं इस उत्तर को तब तक नहीं चुनूंगा जब तक कि डेवलपर के रूप में आपके द्वारा विकसित किए जा रहे सर्वर तक पहुंच न हो, लेकिन आपके पास पृष्ठ तक पहुंच न हो। एक समस्या यह है कि यह काम करने के लिए आपको हर पृष्ठ पर हर पथ को हार्डकोड करना होगा। यदि आप यह मान सकते हैं कि आपके महत्वपूर्ण उपयोग मामलों के लिए जावास्क्रिप्ट सक्रिय है, तो आप जावास्क्रिप्ट को http में बदलने के लिए उपयोग करना बेहतर होगा। उपरोक्त उत्तर बेहतर हैं क्योंकि उन्हें सर्वर पर होने के बाद जावास्क्रिप्ट की आवश्यकता नहीं होती है।
रुस्तवोर

2
बस: क्योंकि htaccess इससे बेहतर विकल्प है। यदि आपके पास प्रमाणपत्र नहीं है, तो यह https प्रोटोकॉल को http पर पुनर्निर्देशित करने की समस्या को ठीक करेगा।
मध्यदेव

1
कार्रवाई सर्वर द्वारा संसाधित की जानी चाहिए, न कि 'ए' दस्तावेज जो इसे परोस सकता है।
अल्बैल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.