是否可以通过 telnet 执行 SSL 握手?

Is it possible to perform SSL handshaking via telnet?

我正在阅读 SSL 的工作原理并尝试与 google pop3 服务器 pop.gmail.com 995 执行握手。我找到了客户端问候消息 there 的示例。所以,我用

连接到 gmail pop 3 服务器
telnet pop.gmail.com 995

没关系。现在我可以向服务器发送消息了。据我了解,我需要做的第一件事就是发送客户端问候消息。所以我输入以下行(为了简化阅读,我将在 \r\n 标记之后换行):

ClientVersion 3,1\r\nClientRandom[32]\r\n
SessionID: None (new session)\r\n
Suggested Cipher Suites:\r\n
  TLS_RSA_WITH_3DES_EDE_CBC_SHA\r\n
  TLS_RSA_WITH_DES_CBC_SHA\r\n
Suggested Compression Algorithm: NONE

按 Enter 并收到消息

Connection closed by foreign host.

怎么了?我应该收到一条服务器问候消息?我要发送什么来接收它?

不,这是不可能的。您尝试输入的文本是 ClientHello 消息的人类可读表示,而不是真实的文本。真正的ClientHello消息是二进制数据,不能通过Telnet会话进入。

你可以使用这个命令。连接后像使用 telnet 一样提出您的请求。

openssl s_client -connect pop.gmail.com:995