रूबी और ओपनएसएसएल के साथ STARTTLS कनेक्शन - रूबी, एसएसएल, openssl, starttls

का उपयोग करते हुए openssl s_client कमांड लाइन पर मैं एक पीओपी 3 सर्वर से कनेक्शन स्थापित करने में सक्षम हूं जिसके लिए STARTTLS की आवश्यकता होती है।

openssl s_client -connect pop3.example.com:110 -starttls pop3

मैं इसे कैसे पूरा कर सकता हूं (विशेष रूप से -starttls pop भाग) रुबी की ओपनएसएसएल लाइब्रेरी का उपयोग करना:

tcp_socket = TCPSocket.new host, port
ssl_context = OpenSSL::SSL::SSLContext.new
ssl_client = OpenSSL::SSL::SSLSocket.new tcp_socket, ssl_context
ssl_client.connect

उत्तर:

जवाब के लिए 2 № 1

पीओपी 3 विनिर्देश बताता है कि आपको भेजने की जरूरत है STLS टीएलएस हैंडशेक शुरू करने के लिए। इसलिए आपको भेजना चाहिए STLS पहले अनएन्क्रिप्टेड सॉकेट पर, और उसके बाद आपको कॉल करने में सक्षम होना चाहिए connect ओपनएसएसएल परत पर, जो वास्तविक हैंडशेक करेगा।

अगर आप कॉल करते हैं connect भेजने से पहले STLS, सर्वर को पता नहीं चला कि क्या हो रहा है, और इसे कचरा इनपुट के रूप में व्याख्या करेगा।

कार्य उदाहरण:

tcp = TCPSocket.new(host, port)

puts tcp.gets
tcp.puts "STLS"
puts tcp.gets

ssl_context = OpenSSL::SSL::SSLContext.new
ssl_client  = OpenSSL::SSL::SSLSocket.new(tcp, ssl_context)

ssl_client.connect
puts ssl_client.state

ssl_client.puts "NOOP"
puts ssl_client.gets

आउटपुट:

+OK POP3 ready <[email protected]>
+OK
SSLOK
+OK

संबंधित सवाल
सबसे लोकप्रिय