2011-11-02 16 views
6

मैं एक ऐसे क्लाइंट के लिए एक ऐप पर काम कर रहा हूं जिसके लिए एपीआई के साथ एक एसएसएल कनेक्शन की आवश्यकता है। मुझे तीन फाइलों के साथ प्रदान किया गया है; एक ट्रस्ट रूट प्रमाणपत्र (.cer) फ़ाइल, एक मध्यवर्ती प्रमाणपत्र (.cer) फ़ाइल और एक हस्ताक्षरित प्रतिक्रिया फ़ाइल। इसे स्थापित करने के लिए दिए गए निर्देश IIS या Java keytool प्रोग्राम से संबंधित हैं; मैं रूबी पर रूबी में ऐप का निर्माण कर रहा हूं इसलिए न तो एक विकल्प है (जहां तक ​​मुझे पता है)।रेल ऐप पर रूबी में क्लाइंट एसएसएल का उपयोग

प्रमाण पत्र संगठन द्वारा स्वयं हस्ताक्षरित हैं जो एपीआई सेवा चलाते हैं और ऐसा प्रतीत होता है कि मुझे पारस्परिक रूप से एक https कनेक्शन प्रमाणीकृत करने के लिए क्लाइंट प्रमाण पत्र दिए जाते हैं। मैं अनिश्चित हूँ कैसे

  1. उपयोग अपने आवेदन में प्रमाण पत्र कनेक्ट और एपीआई

मैं "Using a self-signed certificate" और this article on OpenSSL in Ruby पढ़ा है क्या हस्ताक्षर किए प्रतिक्रिया फ़ाइल करता है उपयोग करने के लिए लेकिन न तो लगता है काफी जगह पर मारा (और दोनों जावा/जेआरबी पर कुछ निर्भरता है जो चीजों को भ्रमित करता है)।

किसी भी पॉइंटर्स की बहुत सराहना की जाएगी।

+0

बस स्पष्ट करने के लिए, आपके द्वारा लिंक किए गए mathish.com आलेख में वास्तव में jRuby के साथ कुछ भी नहीं है। जिस कोड को मैं डेमोइंग कर रहा था उसे एक ActiveMQ संदेश ब्रोकर से बात करना था, जो जावा आधारित है और जावा के SSL प्रमाणपत्र सम्मेलनों का उपयोग करता है। उस कोड में टिप्पणियों की बड़ी संख्या मुझे याद दिलाने के लिए थी कि कैसे जावा के एसएसएल कर्ट को एक कीस्टोर से बाहर निकाला जाए और प्रारूप में ओपनएसएसएल पहचान सके। –

+0

यदि आप किसी टेक्स्ट एडिटर में .cer फ़ाइलों को खोलते हैं, तो क्या वे '----- BEGIN प्रमाणपत्र ----- 'या कुछ और के साथ शुरू करते हैं? –

+0

अरे @ian, इसे स्पष्ट करने के लिए धन्यवाद। वे '----- BEGIN प्रमाण पत्र -----' से शुरू नहीं होते हैं; नहीं। इसे एक टेक्स्ट एडिटर के साथ खोलना; ऐसा लगता है कि सामग्री कुछ फैशन में एन्क्रिप्ट की गई है (केवल ASCII प्रतीकों और रिक्त स्थान आदि का एक यादृच्छिक गुच्छा, कोई सुस्पष्ट अक्षर नहीं)। – jkale

उत्तर

4

अपनी टिप्पणी के आधार पर मैं यह सोचते हैं रहा है कि प्रमाण पत्र डीईआर प्रारूप है, जो आप openssl x509 आदेश (देखें: openssl x509 command): साथ पीईएम के लिए परिवर्तित कर सकते हैं कर रहे हैं

openssl x509 -inform DER -outform PEM -in certfile.cer -out certfile.pem 

उसके बाद, आप निर्देश दे सकते हैं रूबी OpenSSL पुस्तकालय कुछ इस तरह के साथ SSL कनेक्शन प्रमाणित करने के लिए विश्वसनीय रूट प्रमाणपत्र का उपयोग करने:

require 'socket' 
require 'openssl' 

tcp_sock = TCPSocket.new("my.host.tld", 443) 
ctx = OpenSSL::SSL::SSLContext.new 
ctx.verify_mode = OpenSSL::SSL::VERIFY_PEER|OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT 
#You may need to specify the absolute path to the file 
ctx.ca_file = "certfile.pem" 

ssl_sock = OpenSSL::SSL::SSLSocket.new(tcp_sock, ctx) 
ssl_sock.sync_close = true 
ssl_sock.connect 
begin 
    ssl_sock.post_connection_check('my.host.tld') 
rescue 
    puts "Certificate host did not match expected hostname" 
end 

उसके बाद, आप पढ़ सकते हैं और किसी भी अन्य रूबी आईओ वस्तु की तरह ssl_sock में लिखने के लिए सक्षम होना चाहिए।

ctx.cert = OpenSSL::X509::Certificate.new(File.read("my_cert.pem")) 
ctx.key = OpenSSL::PKey::RSA.new(File.read("my_key.rsa")) 

इससे पहले कि आप ssl_sock बनाने के लिए: यदि आप सर्वर में प्रमाणित करने में अनुमति देने के लिए उपयोग करने के लिए क्लाइंट प्रमाणपत्र दिया जाता है, तो आप के साथ SSL संदर्भ कॉन्फ़िगर कर सकते हैं।

अंत में, सलाह के एक पिछले टुकड़ा, यदि आप एक RESTful API तक पहुँच रहे हैं, तो आप rest-client की तरह एक मणि का उपयोग कर विचार कर सकते हैं: OpenSSL पुस्तकालय भी इस तरह के DSA (। OpenSSL::PKey module देखें) के रूप में आरएसए के अलावा अन्य प्रमुख प्रकार, का समर्थन करता है सभी HTTP/एस कनेक्शन सामग्री को सीधे संभालने के बजाय। चाहे ऐसी लाइब्रेरी उपयुक्त या उपयोगी हो, वह उस सेवा पर निर्भर करेगी जिसका आप उपयोग कर रहे हैं।

+0

बस यह ध्यान रखना चाहता था कि 'SSLContext' ऑब्जेक्ट्स पर 'ca_file' विशेषता' के विपरीत, 'प्रमाणपत्र' और 'key' को वास्तविक फ़ाइल डेटा की आवश्यकता होती है, न केवल फ़ाइल का नाम। –

+0

यदि आपको प्रमाणपत्र पर नाम सत्यापित करने की परवाह नहीं है तो आपको 'post_connection_check' और आसपास के' प्रारंभ ... बचाव 'ब्लॉक को भी करने की आवश्यकता नहीं है। –

+0

बड़े कोड ब्लॉक की रेखा 4 'sock' – SnareChops

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