अपाचे: सुरक्षित पोर्ट के लिए भेजा गया असुरक्षित अनुरोध… पुनर्निर्देशित करना चाहते हैं


9

प्रस्तावना

सबसे पहले: बस एक पोर्ट 80 -> पोर्ट 443 फिर से लिखना ठीक नहीं होगा । लगभग हर पिछले प्रश्न में, मेल थ्रेड, फोरम थ्रेड, आदि, मैंने पाया है कि यह पहली अज्ञानी प्रतिक्रिया थी और कई बार तोता था।

दूसरी बात: हां मुझे पता है कि आप उसी पोर्ट पर HTTP और HTTPS ट्रैफिक की सेवा नहीं दे सकते। यह वह नहीं है।

परिदृश्य:

अपाचे सर्वर पोर्ट गुणा के माध्यम से कई साइटों की मेजबानी कर रहा है। पोर्ट 80 एक सार्वजनिक स्थल पर कार्य करता है। पोर्ट 443 उस साइट के सुरक्षित संस्करण का कार्य करता है।

पोर्ट्स 7443, 8443 और 9443 प्रत्येक अलग-अलग एसएसएल-सिक्योर साइटें परोसते हैं।

यदि कोई उपयोगकर्ता URL गलत करता है, या उसे एक लिंक दिया जाता है, जो मान्य नहीं है, तो http: //hostname.tld: 7443 कहते हैं, उन्हें निम्न हास्यास्पद पृष्ठ दिए गए हैं:

अपाचे खराब अनुरोध त्रुटि संदेश

सर्वर के बजाय बस उन्हें https: //hostname.tld: 7443 पर रीडायरेक्ट करना है ।

मेरा सवाल है, ज़ीउस के ब्यूटोल के नाम पर आप अपाचे के व्यवहार को कैसे संशोधित कर सकते हैं या उपयोगकर्ता को स्वचालित रूप से रीडायरेक्ट करने के लिए यह त्रुटि संदेश?

अपाचे स्पष्ट रूप से गैर-https अनुरोध (उस त्रुटि संदेश को प्रदर्शित करने के लिए) की सेवा दे रहा है, भले ही वह HTTPS के लिए कॉन्फ़िगर किया गया हो। यह उल्लेखनीय रूप से मेरे लिए मूर्खतापूर्ण लगता है कि डिफ़ॉल्ट रूप से रीडायरेक्ट न करने के लिए, लेकिन मैं समझ सकता हूं कि वे उस व्यवहार के साथ क्यों गए जो उन्होंने किया था, भले ही मैं इससे सहमत नहीं हूं। तो मेरा सवाल है: क्या आप इसे बदल सकते हैं? वे त्रुटि को संभाल रहे हैं, और अपाचे के साथ कॉन्फ़िगरेशन कॉर्नुकोपिया है कि यह है, यह कारण है कि इस व्यवहार को संभालने के लिए कहीं न कहीं कुछ निर्देश है, लेकिन मैं इसे अब तक कई घंटों की छेड़छाड़ में खोजने में असमर्थ रहा हूं।

अपडेट करें:

मैंने कई तरह की चीजों का प्रयास किया है:

  • ErrorDocument 400एक CGI और एक PHP स्क्रिप्ट प्राप्त करने के लिए निर्देशों का उपयोग करना जो बस भेजते हैं Status 301और Locationहेडर करते हैं। यह एक रिक्त पृष्ठ में परिणाम है। ErrorDocument 400 https://hostname.tld:7443पृष्ठ पर प्रदर्शित किए जा रहे लिंक में केवल परिणाम का उपयोग करना ।

  • mod_rewriteआई या Google के लगभग हर संयोजन का उपयोग करके कंबल स्टेटमेंट शामिल किए जा सकते हैं, जो साइट को पूरी तरह से निर्देशित करते हैं; ये कभी काम नहीं करते। सचमुच, वे कुछ भी नहीं करते हैं। मुझे लगता है कि अपाचे फिर से निर्देशों को संसाधित करने का प्रयास करने से पहले अपाचे को उपरोक्त त्रुटि पर लात मार रहा है।

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



डैनियल, यह उन कई सवालों में से एक था जो मुझे मिला था और इस सवाल को पोस्ट करने से पहले मैंने जो समाधान किए थे। मुझे लगता है कि समस्या PHP घटक थी, लेकिन चूंकि @ रंटिंग के उत्तर का अद्यतन इस समय मेरे लिए खूबसूरती से काम कर रहा है, इसलिए मैं पहले से ही इसमें किसी भी अधिक समय को डूबने नहीं जा रहा हूं; कम से कम जब तक मुझे नहीं करना है।
छिलका

2
लिंक किए गए वीडियो के लिए upvote, यह मेरी भावनाओं को पूरी तरह से बताता है
मिशेल बी

जवाबों:


6

मुझे लगता है कि यह संभवत: एक बग है जिसमें Apache 2.2 और लोअर इस विशेष परिस्थिति को संभालता है।

ऐसा लगता है कि SSL रीड 400 Bad Requestएरर पर, Apache 2.2 HTTP प्रतिक्रिया कोड या हेडर, केवल HTTP प्रतिक्रिया निकाय को वापस नहीं करता है। मैं टेलनेटिंग द्वारा 443 पोर्ट और भेजने के लिए परीक्षण करता हूं:

GET / HTTP/1.1

सर्वर तुरंत लौटता है (मेरे लिए):

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
Reason: You're speaking plain HTTP to an SSL-enabled server port.<br />
Instead use the HTTPS scheme to access this URL, please.<br />
<blockquote>Hint: <a href="https://server.tld/"><b>https://server.tld/</b></a></blockquote></p>
</body></html>

HTTP प्रतिक्रिया कोड या किसी HTTP हेडर की कमी पर ध्यान दें।

जब मैं अपाचे 2.4 सर्वर के लिए यह करता हूं, मुझे मिलता है:

HTTP/1.1 400 Bad Request
Date: Sun, 10 Feb 2013 00:47:23 GMT
Server: Apache/2.4.3 (Unix) OpenSSL/1.0.0g
Content-Length: 462
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
Reason: You're speaking plain HTTP to an SSL-enabled server port.<br />
Instead use the HTTPS scheme to access this URL, please.<br />
</p>
<hr>
<address>Apache/2.4.3 (Unix) OpenSSL/1.0.0g Server at server.tld Port 443</address>
</body></html>

अगर मैंने एक ErrorDocument लाइन सेटअप किया, जैसे आपने किया:

ErrorDocument 400 https://server.tld/

तब मुझे 302 रीडायरेक्ट के लिए HTML मिलता है, लेकिन फिर से, हेडर में से कोई भी नहीं। 302 पुनर्निर्देशन प्रतिक्रिया कोड और Location:हेडर के बिना, ब्राउज़र पुनर्निर्देशित नहीं होगा।

अपाचे 2.4 में अपग्रेड करने की कोशिश करें और देखें कि क्या यह काम करता है। मैंने कम से कम अपाचे 2.4.3 के साथ परीक्षण और पुष्टि की है, लेकिन जब यह व्यवहार अपडेट किया गया था, तो मैं वास्तव में खोजने के प्रयास से नहीं गुजरा। मुझे संदेह है कि 2.4 की तैयारी में उन्होंने जो बड़ी मात्रा में काम किया, उन्होंने साइड-इफेक्ट के रूप में अवांछनीय व्यवहार को सही किया।

प्रासंगिक अपाचे httpd बग:

अपडेट करें

आप अपने इच्छित व्यवहार (अपने रीडायरेक्ट) को स्क्रिप्ट हेडर (जो क्लाइंट को नहीं भेजा जाएगा) का प्रिंट आउट देकर, और उसके बाद मैन्युअल रूप से फिर से हेडर जो आप चाहते हैं, उसे देने के लिए आप एक छोटी-सी अपाचे को बाध्य कर सकते हैं। यहाँ एक मूल पर्ल स्क्रिप्ट है जो Apache 2.2.22 के तहत काम करती है:

#!/usr/bin/perl

use strict;
use CGI;

my $q = CGI->new();

# this will cause Apache to handle the response properly, but is meaningless otherwise
print $q->redirect("https://localhost/");

# this actually performs the redirect
print "HTTP/1.1 302 Found\r\n";
print "Location: https://localhost/\r\n";
print "\r\n";

# you can do whatever you want here; this will be the HTML body

आपको पता होना चाहिए कि एक और कारण है जिससे 400 बिना SSL के सिर्फ SSL पोर्ट पर बात करने के अलावा उत्पन्न हो सकते हैं। इसे निर्धारित करने का आसान तरीका HTTPSपर्यावरण चर को देखना है । यदि यह सेट है, तो SSL ठीक से बातचीत की गई थी और कुछ और 400 का कारण बन रहा है (यदि ऐसा हो तो डबल हेडर ट्रिक न करें)। यदि HTTPSसेट नहीं किया गया है, तो ऊपर के रूप में अपने रीडायरेक्ट को वापस करें।


1
पवित्र। बकवास। एकदम सही जवाब। ग्रेसियस।
छिलका

आप जानते हैं, जैसा कि मैंने इसे पढ़ा है, मैं खुद को सोचता हूं, "यार, यह वास्तव में बेकार है यदि आपके पास अपाचे 2.2 है और आप इस तरह का पुनर्निर्देशन व्यवहार चाहते हैं।" मैं अपने Ubuntu सिस्टम के लिए उपयुक्त Apache 2.4 डिबेट (या अपना खुद का) बनाने के प्रयास से नहीं गुजरने वाला हूं। मुझे यकीन है कि आप अपने PHP स्क्रिप्ट से एक समाधान हैक कर सकते हैं। अपाचे का स्पष्ट रूप से क्लाइंट को आउटपुट डंप करना, इसलिए यदि आप विशिष्ट अपेक्षित सामग्री वापस करते हैं, तो मुझे यकीन है कि आप अपाचे को अपग्रेड किए बिना उस व्यवहार को प्राप्त कर सकते हैं जिसे आप देख रहे हैं। अपने PHP स्क्रिप्ट का प्रिंट आउट "HTTP / 1.1 302 मिला \ r \ n हटाएं : server.tld \ r \ n \ r \" होने का प्रयास करें।
13:00

समस्या यह है कि यह प्रकट नहीं होता है कि PHP स्क्रिप्ट संसाधित हो रही है। मुझे ध्यान देना चाहिए कि यह उबंटू सर्वर 12.04 पर Apache 2.2.22 पर बैठा है। और हाँ, यह वास्तव में, वास्तव में बेकार है; विशेष रूप से जब आप ध्यान दें कि उन बग रिपोर्ट में, वे पूरी तरह से केवल स्वचालित रूप से रीडायरेक्ट करने के लिए एक विकल्प प्रदान करने के खिलाफ पूरी तरह से सेट लग रहे हैं, और वहाँ बहुत उम्मीद नहीं है कि 2.2 कभी तय हो रही होगी।
छिलका

1
और जैसा कि मैंने ऊपर कहा, यह मेरे लिए कोई मतलब नहीं है कि आप उस त्रुटि संदेश को लिखने के लिए परेशानी से क्यों गुज़रते हैं, बजाय इसे सुरक्षित करने के लिए पुनर्निर्देशित करने के (गंभीरता से, सिर्फ पुनर्निर्देशित क्यों नहीं? जितना मैं इसके बारे में सोचता हूं, उतना कम है? मुझे लगता है कि यह एक बुरा विचार है)।
छिलका

1
मैंने उस खूनी संदेश के पाठ की तलाश में पूरे फाइल सिस्टम को पकड़ लिया है, यह देखने के लिए कि क्या मैं जहां से ले जा रहा हूं, वहां से बंद मौका पर मैं एक <javascriptटैग को इंजेक्ट कर सकता हूं और उस तरह से हैकिंग पुनर्निर्देशन के साथ भाग्यशाली हो सकता हूं , लेकिन इस प्रकार, अब तक, नहीं पासा। इस बारे में कुछ भी नहीं लगता है कि एक तरह से नियंत्रित किया जाता है जो कि बहुत कठोर अपाचे
अजीबता का

-1

आप इसे मॉड-रीराइट के साथ ठीक कर सकते हैं। कुछ भी मिलान करने के लिए एक नियम निर्धारित करें। Stackoverflow पर यह उत्तर देखें


नहीं, मैं पहले से ही कोशिश की है कि, यह काम नहीं करता है। इसकी तरह यह भी ModRewrite चरणों के लिए नहीं है क्योंकि इसकी http / https बेमेल पहले मार रहा है।
छिलका

इसलिए मैं मानता हूं कि आपने अपाचे कॉन्फिग फाइल के ऊपर से शुरुआत की है और यह देखने के लिए अपने तरीके से काम किया है कि यह क्या कह रहा है
ट्रेंट

मैंने पूरी sites-availableनिर्देशिका को व्यावहारिक रूप से याद किया है । यहां तक ​​कि अगर आप इसे केवल बकवास पर पुनर्निर्देशित करते हैं, या इसे किसी अलग साइट, विभिन्न पोर्ट आदि पर रीडायरेक्ट करते हैं, तो यह केवल उस 400 बैड अनुरोध को लोड करता रहता है।
छिलका
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.