2009-07-11 23 views
41

मैं एक https कनेक्शन पर ओपन-यूरी वाली फ़ाइल तक पहुंचने का प्रयास करता हूं। दुर्भाग्यवश प्रमाण पत्र के साथ कुछ गलत है, मुझे प्रमाण पत्र सत्यापित त्रुटि मिली है। मैं इसके बारे में कुछ नहीं कर सकता, इसलिए मुझे सत्यापन को बाईपास करना है।ओपन-यूरी में एसएसएल प्रमाणपत्र सत्यापन को कैसे बाईपास करें?

मैं इस answer

मैं/सर्वर पर oen-uri.rb बदल नहीं सकते नहीं करना चाहते, और मैं रूबी 1.8.6 चल रहा हूँ।

मैं सत्यापन मोड कैसे बदलूं? या अधिक सटीक कहां मैं इसे बदलूं?

मैं इसे कहां रख सकता हूं?

if target.class == URI::HTTPS 
require 'net/https' 
http.use_ssl = true 
http.verify_mode = OpenSSL::SSL::VERIFY_NONE 
store = OpenSSL::X509::Store.new 
store.set_default_paths 
http.cert_store = store 
end 

या गंदा हैक: मैं इसे कहां रख सकता हूं?

OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE 

उत्तर

59

फोन तुम सच में प्रमाण पत्र सत्यापन का उपयोग करने का अतिरिक्त सुरक्षा नहीं करना चाहते हैं, और रूबी 1.9.3p327 + में नवीनीकृत कर सकते हैं, तो आप open विधि के लिए ssl_verify_mode विकल्प दे सकते हैं। उदाहरण के लिए यहाँ कैसे मैं इसे कर रहा हूँ है:

request_uri=URI.parse('myuri?that_has=params&encoded=in_it&optionally=1') 

# The params incidentally are available as a String, via request_uri.query 
output = open(request_uri, {ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE}) 
obj = JSON.parse output.readlines.join("") 
+0

@ जिमीमीन 2.2.1p85, verify_mode काम नहीं करता है। – nurettin

+0

@nurettin - आप 100% सही हैं। मैं गलत मणि देख रहा था। HTTP क्लाइंट यह सत्यापित_मोड है। मैंने गलत जानकारी के साथ अव्यवस्था के लिए टिप्पणी से हटा दिया है। इस पर ध्यान दिलाने के लिए धन्यवाद। http://www.rubydoc.info/gems/httpclient/HTTPClient%2FSSLConfig%3Averify_mode – JamesDeHart

+1

@JimmyDean – nurettin

38

अब इसे स्वयं मिला: मैंने गंदे हैक का उपयोग किया, जो मेरे लिए ठीक काम करता है।

मैं इसे में लाना था: yourrailsapp/initalizers/

वहाँ मेरे द्वारा बनाए गए एक bypass_ssl_verification_for_open_uri.rb

और डाल:

OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE 
+8

आप एक 'गतिशील लगातार काम' त्रुटि निम्न कार्य मिलता है: OpenSSL :: SSL.const_set (: VERIFY_PEER जो OpenSSL :: एसएसएल :: VERIFY_NONE) – Sam

+3

और यहां तक ​​कि 'चेतावनी से बचने के लिए: पहले से ही प्रारंभ निरंतर OpenSSL :: SSL :: VERIFY_PEER' चेतावनी, इसे वापस जोड़ने से पहले निरंतर को हटाने के लिए 'remove_const' का उपयोग करें। टिप्पणी में टाइप करना मुश्किल है इसलिए [इस गीस्ट को इसके बजाय देखें] (https://gist.github.com/siruguri/66926b42a0c70ef7119e)। – sameers

+0

अगर आप रूबी का उपयोग कर रहे हैं तो @sameers उत्तर पसंद करें 1.9.3p327 + – jvenezia

1

environment.rb में शामिल करने के लिए एक अच्छे उम्मीदवार की तरह लगता है, या इस करता है, तो हैक केवल विशेष वातावरण में आवश्यक है, फिर अपनी व्यक्तिगत विन्यास फाइलों में।

13

यह अच्छा है (यह uninitialized constant OpenSSL (NameError) अंडे हो सकते हैं) है कि लाइन से पहले 'openssl' की आवश्यकता होती है डाल करने के लिए है, तो

एप्लिकेशन/config/initializers/bypass_ssl_verification_for_open_uri.rb (प्रारंभकर्ता के फ़ाइल नाम 'नहीं करता है बात)

require 'openssl'
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE

+3

मैं इसे स्क्रिप्ट पर कैसे उपयोग कर सकता हूं? मैंने कोशिश की है और मुझे 'चेतावनी मिली है: पहले से ही VERIFY_PEER को प्रारंभ किया गया है।' और यह – daitangio

+0

काम नहीं करता है, ऐसा लगता है कि निरंतर VERIFY_PEER पहले से कहीं पहले परिभाषित है, आपको सत्यापन त्रुटि प्रमाणित हो जाती है? मैक ओएस एक्स पर –

3

एक कमजोर लेकिन नियंत्रित रास्ता

class XMLRPC::Client 
# WEAK: Enrich the Client with a method for disabling SSL VERIFICATION 
# See /usr/lib/ruby/1.9.1/xmlrpc/client.rb:324 
# Bad hack but it works 
def disableSSLVerification 
    @http.verify_mode = OpenSSL::SSL::VERIFY_NONE 
    warn "Proxyman SSL Verification disabled" 
end 
end 
है

तो फिर तुम बस

client.disableSSLVerification() 
9

आप अपने आप को उल्लेख किया है, यह एक गंदा हैक है। जाहिर है, एसएसएल प्रमाणपत्र सत्यापन अक्षम करना एक अच्छा विचार नहीं है।

मिस्लाव मारोहिनीक द्वारा बहुत उपयोगी article है, जो बहुत विस्तार से है कि यह क्यों बुरा है और इसे ठीक से कैसे संबोधित किया जाए।

सारांश में, आप ज्यादातर SSL त्रुटि का सत्यापन मिलती है:

  1. प्रमाणपत्र मान्य है, लेकिन आपके सिस्टम के सत्यापन के लिए आवश्यक मूल प्रमाणपत्र नहीं है।
  2. प्रमाणपत्र स्वयं हस्ताक्षरित है, उदा। अपनी कंपनी में है और आप इसे
  3. पर भरोसा करने की जरूरत है आप के अधीन हैं या एक मैन-इन-मध्यम हमले

मेरे लिए पहला मामला लागू किया, और बस पर ca-प्रमाण पत्र पैकेज को अपडेट करने मेरी उबंटू प्रणाली ने चाल की।

आपकी एसएसएल त्रुटि को ट्रैक करने के लिए एक शानदार टूल ssl doctor script है।

3

यह आपका कॉल है, लेकिन VERIFY_PEER को किसी भी स्थान पर सेट करना मूल रूप से को टीएलएस को अक्षम करने और सादे टेक्स्ट HTTP पर कनेक्ट करने के लिए बराबर है। यह मध्य हमले में आदमी बनाता है, और पीसीआई ऑडिट पास नहीं करेगा।

संबंधित मुद्दे