2011-01-20 15 views
8

रूबी में xmlrpc/client का उपयोग करते हुए एक XML-RPC सेवा तक पहुंचने पर, यह सर्वर प्रमाणपत्र मान्य नहीं होने पर OpenSSL::SSL::SSLError फेंकता है। मैं इसे इस त्रुटि को अनदेखा कैसे कर सकता हूं और कनेक्शन के साथ आगे बढ़ सकता हूं?मैं रूबी के xmlrpc क्लाइंट को SSL प्रमाणपत्र त्रुटियों को अनदेखा कैसे कर सकता हूं?

उत्तर

12

बाहर कर देता है यह इस तरह है:

xmlrpc = ::XMLRPC::Client.new("foohost") 
xmlrpc.instance_variable_get(:@http).instance_variable_set(:@verify_mode, OpenSSL::SSL::VERIFY_NONE) 

कि रूबी 1.9.2 के साथ काम करता है, लेकिन स्पष्ट रूप से आंतरिक पर poking है, इसलिए असली जवाब है, "एपीआई तरह के एक तंत्र प्रदान नहीं करता है, लेकिन यहाँ है एक हैक "।

0

वास्तव में ग्राहक अद्यतन किया गया है, अब एक http कनेक्शन के लिए सीधी पहुंच है: https://bugs.ruby-lang.org/projects/ruby-trunk/repository/revisions/41286/diff/lib/xmlrpc/client.rb

xmlrpc.http.verify_mode = OpenSSL::SSL::VERIFY_NONE 

लेकिन बेहतर ca_file या ca_path निर्धारित किया है। फिर भी मुझे _async कॉल पर ऐसी कॉन्फ़िगरेशन लागू करने का कोई विकल्प नहीं दिखाई देता है।

अद्यतन:

xmlrpc_client.http.ca_file = @options[:ca_file] 
    xmlrpc_client.instance_variable_set(:@ca_file, @options[:ca_file]) 
    def xmlrpc_client.net_http(host, port, proxy_host, proxy_port) 
     h = Net::HTTP.new host, port, proxy_host, proxy_port 
     h.ca_file = @ca_file 
     h 
    end 

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