我使用OpenSSL的连接到SMTP服务器(通常不加密),发送一个STARTTLS命令,洽谈SSL加密,然后用加密的会话交互。
这是我使用(通过telnet)的命令:
openssl s_client -starttls smtp -crlf -connect 1.2.3.4:25
我怎样才能确保TLS握手是成功的?
这是迄今为止所使用的命令的序列:
<< 220 example.com ESMTP ready
>> EHLO localhost
<< 250-smtp.mail.yahoo.com
<< 250-PIPELINING
<< 250-AUTH PLAIN LOGIN CRAM-MD5
<< 250 STARTTLS
>> STARTTLS
<< 220 2.0.0 Start TLS
>> openssl s_client -starttls smtp -crlf -connect 127.0.0.1:587
你似乎是混乱的壳(那里你可以输入诸如命令telnet
或openssl
)和插座的协议。
使用telnet连接到端口(如SMTP)的协议是一个快速的黑客工具,可以让你输入什么直接您通常会拥有,如果实施该协议的客户端编程。 它可以工作得更为基于文本的协议,但它有它的局限性。 特别是,你将有一个硬的时间打字的TLS握手是这样的:首先,你可能将无法找到你的键盘上的左右键为一些你需要发送的字节; 其次,你肯定将无法读什么服务器发送你。 总之,这种方法没有任何意义。
openssl s_client -starttls smtp -crlf -connect 127.0.0.1:587
已经这样做你想要什么通过telnet做的事:它打开到服务器的连接,发送EHLO
SMTP命令,发送STARTTLS
SMTP命令,然后开始握手。 OpenSSL命令本身是不是在所有的SMTP协议的一部分,必须不能在SMTP套接字上发送。 你会得到当运行这个命令应该类似于具有已经执行了握手的telnet会话,因为你应该能够使用它的标准输入/输出中以同样的方式你就可以远程登录。
这是说,无论是telnet
和openssl s_client
发送SMTP命令在最好的调试技术。