使用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就绪
+嗯
斯洛克
+嗯