
Ruby In The Middle (HTTP/HTTPS इंटरसेप्शन प्रॉक्सी)
Ruby in the middle (RITM) एक HTTP/HTTPS इंटरसेप्शन प्रॉक्सी है जो ऑन-द-फ्लाई सर्टिफिकेट जनरेशन और साइनिंग करता है, जो उपयोगकर्ता को Ruby भाषा की पूर्ण शक्ति के साथ छोड़ता है ताकि वह अनुरोधों (requests) और प्रतिक्रियाओं (responses) को अपनी इच्छानुसार इंटरसेप्ट और संशोधित कर सके।
gem install ritm
require 'ritm'
# A single answer for all your google searches
Ritm.on_request do |req|
if req.request_uri.host.start_with? 'www.google.'
new_query_string = req.request_uri.query.gsub(/(?<=^q=|&q=)(((?!&|$).)*)(?=&|$)/, 'RubyInTheMiddle')
req.request_uri.query = new_query_string
end
end
my_picture = File.read('i_am_famous.jpg')
# Replaces every picture on the web with my pretty face
Ritm.on_response do |_req, res|
if res.header['content-type'] && res.header['content-type'].start_with?('image/')
res.header['content-type'] = 'image/jpeg'
res.body = my_picture
end
end
Ritm.start
puts 'Hit enter to finish'
gets
Ritm.shutdown
या जिस भी HTTP क्लाइंट से आप ट्रैफ़िक इंटरसेप्ट करना चाहते हैं, उसे localhost:8080 पर प्रॉक्सी से कनेक्ट करने के लिए कॉन्फ़िगर करें।
ऊपर दिए गए उदाहरणों के लिए, Google में कुछ भी खोजें और अपनी पसंदीदा समाचार पत्र वेबसाइट पर भी जाएँ।
पिछले उदाहरण में आपके क्लाइंट को HTTPS संसाधनों तक पहुँचने का प्रयास करते समय समस्याएँ आ सकती हैं। कुछ मामलों में आप अपने ब्राउज़र में एक अपवाद जोड़ सकते हैं (या अपने HTTP क्लाइंट को प्रमाणपत्र सत्यापित न करने का निर्देश दे सकते हैं) लेकिन कुछ अन्य मामलों में आप अपवाद नहीं जोड़ पाएंगे। इसका कारण यह है कि SSL ट्रैफ़िक को डिक्रिप्ट और संशोधित करने में सक्षम होने के लिए, RITM को क्लाइंट के साथ SSL नेगोशिएशन करना होगा (अपने स्वयं के प्रमाणपत्रों का उपयोग करके) और फिर यह सर्वर की ओर एक अलग SSL सत्र स्थापित करेगा। अर्थात:
Client <--- SSL session ---> RITM <--- SSL session ---> Server
आपका क्लाइंट जिस भी अलग-अलग सर्वर के होस्टनाम से संवाद करने का प्रयास करता है, उसके लिए RITM एक प्रमाणपत्र तुरंत उत्पन्न करेगा और उसे पूर्व-कॉन्फ़िगर्ड सर्टिफिकेट अथॉरिटी (CA) से हस्ताक्षरित करेगा। इसलिए, एक सुरक्षित कनेक्शन स्थापित करने में सक्षम होने के लिए आपको अपने क्लाइंट (जैसे ब्राउज़र) को RITM के CA पर भरोसा करने के लिए कॉन्फ़िगर करना होगा।
सुरक्षा कारणों से, जब भी आप डिफ़ॉल्ट सेटिंग्स के साथ RITM के प्रॉक्सी को शुरू करते हैं, तो यह एक नया आंतरिक सर्टिफिकेट अथॉरिटी उत्पन्न करेगा। इसके बजाय अपने स्वयं के CA का उपयोग करने के लिए (ताकि इसे आपके ब्राउज़र द्वारा लोड और विश्वसनीय किया जा सके) निम्नलिखित चरणों का पालन करें:
आप इन दो फ़ाइलों को उत्पन्न करने के लिए OpenSSL या RITM का उपयोग कर सकते हैं। OpenSSL के साथ:
openssl req -new -nodes -x509 -days 365 -extensions v3_ca -keyout insecure_ca.key -out insecure_ca.crt
या RITM के साथ:
require 'ritm/certs/ca'
ca = Ritm::CA.create common_name: 'InsecureCA'
File.write('insecure_ca.crt', ca.pem)
File.write('insecure_ca.key', ca.private_key.to_s)
Ritm.configure do
ssl_reverse_proxy.ca[:pem] = 'path/to/insecure_ca.crt'
ssl_reverse_proxy.ca[:key] = 'path/to/insecure_ca.key'
end
Ritm.start
puts 'Hit enter to finish'
gets
Ritm.shutdown
मैं इसे आप पर छोड़ता हूँ कि आप अपने ब्राउज़र या क्लाइंट में यह कैसे करें। 4. वेब सर्फ़ करें!
या CA की प्राइवेट की की बहुत अच्छी तरह से देखभाल करें क्योंकि उस की को रखने वाला कोई भी आपके सभी ट्रैफ़िक को डिक्रिप्ट करने में सक्षम होगा! यह भी ध्यान दें कि प्रॉक्सी का उपयोग करते समय प्रत्येक सर्वर स्वचालित रूप से विश्वसनीय होगा, भले ही अंतिम सर्वर का प्रमाणपत्र मान्य न हो।
ऊपर दिए गए उदाहरणों में हम डिफ़ॉल्ट वैश्विक सत्र का उपयोग कर रहे थे। यदि आप स्थिर रूप से कॉन्फ़िगर्ड वैश्विक सत्र का उपयोग करना पसंद नहीं करते हैं, या आप एक साथ कई सत्र चाहते हैं (जैसे विभिन्न पोर्ट पर सुनने वाले और विभिन्न इंटरसेप्शन हैंडलर का उपयोग करने वाले कई प्रॉक्सी) तो आप इस तरह से विभिन्न सत्र इंस्टेंस बना सकते हैं:
session = Ritm::Session.new
# Now you can use the same methods but on the session instance
session.configure { proxy[:bind_port] = 7777 }
session.on_request { |req| ...do something here ... }
another_session = Ritm::Session.new
another_session.configure { proxy[:bind_port] = 8888 }
another_session.on_request { |req| ...do something else ... }
session.start
another_session.start
puts 'Hit enter to finish'
gets
session.shutdown
another_session.shutdown
Apache लाइसेंस, संस्करण 2.0 ("लाइसेंस") के तहत लाइसेंस प्राप्त; आप इस फ़ाइल का उपयोग केवल लाइसेंस के अनुपालन में ही कर सकते हैं। आप लाइसेंस की एक प्रति यहाँ प्राप्त कर सकते हैं
http://www.apache.org/licenses/LICENSE-2.0
जब तक लागू कानून द्वारा आवश्यक न हो या लिखित रूप में सहमति न दी गई हो, लाइसेंस के तहत वितरित सॉफ़्टवेयर "जैसा है" (AS IS) आधार पर वितरित किया जाता है, बिना किसी प्रकार की वारंटी या शर्तों के, चाहे वह स्पष्ट या निहित हो। लाइसेंस के तहत विशिष्ट अनुमतियों और सीमाओं के लिए लाइसेंस देखें।