openssl为STARTTLS协商SSL加密

stu*_*hms 9 ssl openssl smtp starttls

我正在使用openssl正常连接到SMTP服务器(不加密),发送STARTTLS命令,协商SSL加密,然后与加密会话进行交互.

这是我正在使用的命令(通过telnet):

openssl s_client -starttls smtp -crlf -connect 1.2.3.4:25
Run Code Online (Sandbox Code Playgroud)

如何确保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    
Run Code Online (Sandbox Code Playgroud)

Bru*_*uno 20

你似乎混淆了一个shell(你输入telnetor 等命令openssl)和socket的协议.

使用telnet连接到SMTP等协议的端口是一种快速入侵,如果为该协议实现客户端,则允许您直接键入通常需要编程的内容.它可以为基于文本的协议稍微工作,但它有局限性.特别是,您将很难以这种方式输入TLS握手:首先,您可能无法在键盘上找到需要发送的某些字节的正确键; 其次,您肯定无法读取服务器发送给您的内容.简而言之,这种方法没有任何意义.

openssl s_client -starttls smtp -crlf -connect 127.0.0.1:587已经执行了您尝试使用telnet执行的操作:它打开与该服务器的连接,发送EHLOSMTP命令,发送STARTTLSSMTP命令,然后启动握手.OpenSSL命令本身根本不是SMTP协议的一部分,不能在SMTP套接字上发送.运行此命令时所获得的内容应类似于已执行握手的telnet会话,因为您应该能够以与telnet相同的方式使用其标准输入/输出.

这就是说,发送SMTP命令telnetopenssl s_client发送SMTP命令充其量只是调试技术.