Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Ruby和OpenSSL启动TTLS连接_Ruby_Ssl_Openssl_Starttls - Fatal编程技术网

使用Ruby和OpenSSL启动TTLS连接

使用Ruby和OpenSSL启动TTLS连接,ruby,ssl,openssl,starttls,Ruby,Ssl,Openssl,Starttls,使用命令行上的openssl s_client,我能够建立到需要STARTTLS的POP3服务器的操作 openssl s_client -connect pop3.example.com:110 -starttls pop3 如何利用Ruby的OpenSSL库实现同样的功能(尤其是-starttls pop部分): tcp_socket = TCPSocket.new host, port ssl_context = OpenSSL::SSL::SSLContext.new ssl_clie

使用命令行上的
openssl s_client
,我能够建立到需要STARTTLS的POP3服务器的操作

openssl s_client -connect pop3.example.com:110 -starttls pop3
如何利用Ruby的OpenSSL库实现同样的功能(尤其是
-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

POP3规范规定,您需要发送
STL
,以启动TLS握手。因此,您应该首先在未加密的套接字上发送
stl
,然后才能调用OpenSSL层上的
connect
,然后执行实际的握手

如果在发送
stl
之前调用
connect
,服务器将不知道发生了什么,并将其解释为垃圾输入

工作示例:

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 <2067986403.1526483285@....>
+OK
SSLOK
+OK
+OK POP3就绪
+嗯
斯洛克
+嗯

POP3规范规定,为了启动TLS握手,您需要发送
STL
。因此,您应该首先在未加密的套接字上发送
stl
,然后才能调用OpenSSL层上的
connect
,然后执行实际的握手

如果在发送
stl
之前调用
connect
,服务器将不知道发生了什么,并将其解释为垃圾输入

工作示例:

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 <2067986403.1526483285@....>
+OK
SSLOK
+OK
+OK POP3就绪
+嗯
斯洛克
+嗯