在命令行上使用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
答案 0 :(得分:2)
POP3规范声明您需要发送STLS
才能启动TLS握手。因此,您应首先在未加密的套接字上发送STLS
,之后您应该能够在OpenSSL层上调用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 <2067986403.1526483285@....>
+OK
SSLOK
+OK