2010-12-01 11 views
13

मुझे प्रमाण पत्र सत्यापित करने के लिए SSL प्राप्त करने में एक भयानक समय है। मैं पूरी तरह से अज्ञानी हूं कि प्रमाण पत्र कैसे काम करते हैं ताकि यह शुरू करने के लिए एक बड़ी बाधा हो। यहाँ त्रुटि मैं जब स्क्रिप्ट चलाने प्राप्त होते हैं:कनेक्ट: SSL_connect वापस = 1 errno = 0 स्थिति = SSLv3 सर्वर प्रमाण पत्र पढ़ें बी: प्रमाण पत्र सत्यापित विफल (OpenSSL :: SSL :: SSLError)

c:/Ruby191/lib/ruby/1.9.1/net/http.rb:611:in `connect': SSL_connect returned=1 e 
rrno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL 
::SSL::SSLError) 

यहाँ प्रासंगिक कोड है:

client = Savon::Client.new order_svc 

request = client.create_empty_cart { |soap, http| 
    http.auth.ssl.cert_file = 'mycert.crt' 
    http.auth.ssl.verify_mode = :none 
    http.read_timeout = 90 
    http.open_timeout = 90 
    http.headers = { "Content-Length" => "0", "Connection" => "Keep-Alive" } 
    soap.namespaces["xmlns:open"] = "http://schemas.datacontract.org/2004/07/Namespace" 
    soap.body = { 
     "wsdl:brand" => brand, 
     "wsdl:parnter" => [ 
     {"open:catalogName" => catalogName, "open:partnerId" => partnerId } 
     ] }.to_soap_xml 

     } 

किसी भी मदद की सराहना की है।

+0

मैं 2.1.5 करने के लिए नवीनतम बीटा 0.8.0.beta4 करने और httpclient Savon अद्यतन के साथ परीक्षण कर सकते हैं । त्रुटि संदेश थोड़ा बदल गया लेकिन फिर भी वही त्रुटि हो रही है। डी, [2010-12-01T09: 53: 58.500216 # 3116] DEBUG -: WSDL को पुनर्प्राप्त करना: https: //testsite/MyService.svc? Wsdl गहराई 0 - 20: स्थानीय जारीकर्ता प्रमाणपत्र प्राप्त करने में असमर्थ सी: /Ruby191/lib/ruby/gems/1.9.1/gems/httpclient-2.1.5.2/lib/httpclient/session.rb : 247: 'कनेक्ट' में: SSL_connect वापस = 1 errno = 0 state = SSLv3 पढ़ा गया सर्वर प्रमाणपत्र आईसीएटी बी: ​​प्रमाण पत्र सत्यापित विफल (ओपनएसएसएल :: एसएसएल :: एसएसएलआरआरआरआर) – r3nrut

+0

मेरा जवाब यहां देखें: http://stackoverflow.com/a/16983443/11792 –

+1

*** खराब विचार ***: * 'http.auth.ssl.verify_mode =: कोई नहीं * *। अगर संपत्तियों को संरक्षित करने की आवश्यकता नहीं है, तो सर्वर HTTPS और SSL/TLS का उपयोग नहीं करेगा। – jww

उत्तर

-1

नोट: मैं निचले स्तर वातावरण कि नहीं था में परीक्षण स्वचालन के साथ काम कर रहा था सही ढंग से हस्ताक्षरित प्रमाणपत्र हैं और डोमेन हस्ताक्षर मिलान नहीं होने के कारण त्रुटियों को अक्सर फेंक देंगे। हाथ पर समस्या के लिए, हस्ताक्षर को छोड़कर एक व्यावहारिक समाधान था, लेकिन यह उत्पादन स्तर के विकास के लिए उपयोग किए जाने वाले समाधान नहीं है।

मेरी समस्या यह है कि मैं एक स्व-हस्ताक्षरित प्रमाण पत्र को सत्यापित करने की कोशिश कर रहा हूं। मुझे बस इतना करना था कि प्रमाण पत्र प्रमाणित करने के साथ निम्नलिखित कोड डालें और कुछ भी छोड़ दें।

मुझे अपने एसओएपी और आरईएसटी कॉल दोनों के लिए ऐसा करना था जो दोनों एक ही मुद्दे का सामना कर रहे थे।

Savon

का उपयोग कर सोप
client = Savon::Client.new order_svc 

request = client.create_empty_cart { |soap, http| 
    http.auth.ssl.verify_mode = :none 
    http.headers = { "Content-Length" => "0", "Connection" => "Keep-Alive" } 
    soap.namespaces["xmlns:open"] = "http://schemas.datacontract.org/2004/07/Namespace" 
    soap.body = { 
     "wsdl:brand" => brand, 
     "wsdl:parnter" => [ 
     {"open:catalogName" => catalogName, "open:partnerId" => partnerId } 
     ] }.to_soap_xml 

     } 

बाकी client.request ब्लॉक के अंदर http.auth.ssl.verify_mode = :none लाना मेरे लिए काम नहीं करता है httpclient

client = HTTPClient.new 
client.ssl_config.verify_mode=(OpenSSL::SSL::VERIFY_NONE) 
resp = client.get(Methods) 
+5

ऐसा मत करो !!!! प्रमाण पत्र सत्यापन विशेष रूप से उत्पादन में न छोड़ें। यहां मेरे उत्तर पर एक नज़र डालें http://stackoverflow.com/a/16983443/11792 –

+1

कृपया ऐसा न करें। –

+0

स्पष्ट होने के लिए, मैं इसे टेस्ट ऑटोमेशन फ्रेमवर्क के लिए उपयोग कर रहा था जहां लक्षित वातावरण प्री-प्रोडक्शन और नीचे से और स्व-हस्ताक्षरित कॉर्ट का उपयोग करके कुछ भी था। मैं उत्पादन में छोड़ने प्रमाणपत्र सत्यापन का अभ्यास नहीं करेंगे। यद्यपि चेतावनी के लिए धन्यवाद। – r3nrut

1

आपको अपने प्रमाणपत्र के साथ-साथ निजी कुंजी फ़ाइल प्रदान करने की आवश्यकता है।

http.auth.ssl.cert_key_file = "mycert.pem" 

अपनी निजी कुंजी फ़ाइल एन्क्रिप्टेड है, तो आप भी पासवर्ड देने की आवश्यकता होगी:

http.auth.ssl.cert_key_password = "foobar" 
1

का उपयोग कर।

मैं का इस्तेमाल किया था:

client = Savon::Client.new do |wsdl, http| 
    http.auth.ssl.verify_mode = :none 
    wsdl.document = #YOUR_WSDL_URL_HERE 
end 

Savon 0.9.9 और रूबी का उपयोग 1.9.3-p125

+0

यह रूबी 1.9.2-पी 320 और स्यूवन 1.2.0 के साथ मेरे लिए काम किया। जब मैंने savon को <1.0 से 1.2.0 तक अद्यतन किया, तो मैंने केवल इस समस्या का अनुभव करना शुरू कर दिया। –

+0

ssl_verify_mode का उपयोग करें:: कोई नहीं - उदाहरण के लिए ... क्लाइंट = Savon.client (wsdl: 'https: // your_url? Wsdl', ssl_verify_mode:: none) – genegc

+1

मुझे बीजे क्लार्क और अन्य दोहराएं: कृपया न करें यह करो। अगर संपत्तियों को संरक्षित करने की आवश्यकता नहीं है, तो सर्वर HTTPS और SSL/TLS का उपयोग नहीं करेंगे। – jww

5

अपने cert.pem और अपने key.pem जाँच

प्रमाणपत्र कुंजी चाहिए एक

-----BEGIN CERTIFICATE----- 
MIIFGDCCBACgAwIBAgIKG1DIagAAAAAAAzANBgkqhkiG9w0BAQsFADCBvDEkMCIG 
.... 
-----END CERTIFICATE----- 

अपने key.pem

होना चाहिए है 0
-----BEGIN PRIVATE KEY----- 
CSqGSIb3DQEJARYVY2Fjb250YWN0QGVzY3JlZW4uY29tMQswCQYDVQQGEwJVUzEP 
.... 
-----END PRIVATE KEY----- 

और इसमें कुछ कर्ट हो सकते हैं लेकिन इससे कोई फर्क नहीं पड़ता। (हालांकि यह मेरे लिए करता है क्योंकि कर्ल अतिरिक्त कर्ट के बिना काम नहीं करता है) जिन webservice के साथ मैं बात कर रहा हूं, उनके पास एक अच्छा रूट सीए है, लेकिन क्लाइंट ऑथ कुंजियां भरोसेमंद नहीं हैं इसलिए संभवतः अतिरिक्त कर्ट कर्ल काम करते हैं।

आपके क्लाइंट प्रमाण पत्र से बाहर निकलने से मुझे समस्याएं आईं।

यहां मेरे लिए क्या काम किया गया है।

openssl pkcs12 -in Client.pfx -clcerts -nokeys -out cert.pem 
openssl pkcs12 -in Client.pfx -nodes -out key.pem 

प्रत्येक आयात पासवर्ड के लिए संकेत देगा और अगर आप चाहते हैं आप एक पीईएम पासवर्ड सेट कर सकते हैं। (आप बाद में स्थापित करने के लिए है कि गहरे लाल रंग का कोड में होता है)

require 'savon' 
client = Savon::Client.new "https://service/Service.asmx?wsdl" 
client.http.auth.ssl.cert_key_file = "key.pem" 
client.http.auth.ssl.cert_file = "cert.pem" 
client.http.auth.ssl.verify_mode=:peer 

p client.wsdl.soap_actions 

आप भी कर्ल

curl -v -E key.pem https://services/Service.asmx?wsdl 
+0

यह समाधान ठीक काम करेगा, लेकिन उस समय मैं एक स्व-हस्ताक्षरित प्रमाणपत्र को संबोधित करने का उत्तर ढूंढ रहा था जहां मुझे इसे अनदेखा करने की आवश्यकता थी। धन्यवाद! – r3nrut

+1

*** प्लस वन *** - आपने प्रमाण पत्र सत्यापन बंद करने के लिए ओपी को नहीं बताया था। – jww

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