使用 openssl s_client 命令与 google mail 连接

Bru*_*ego 1 gmail openssl smtp

目标是使用以下命令发送电子邮件:

openssl s_client \
  -connect smtp.gmail.com:587 \
  -starttls smtp
Run Code Online (Sandbox Code Playgroud)

为此,在连接后,我使用 Base64 格式的用户名和密码提交必要的命令:

EHLO smtp.gmail.com
AUTH LOGIN
MAIL FROM: <noreply@example.com>
RCPT TO: <*****@gmail.com>
DATA
Subject: Sending an email using telnet

Hello,
This is an email sent by using the telnet command.

Your friend,
Me!
.
QUIT
Run Code Online (Sandbox Code Playgroud)

我正在尝试理解并搜索以下问题的解决方案:

RENEGOTIATING
4707790444:error:1400444C:SSL routines:CONNECT_CR_SRVR_HELLO:tlsv1 alert no renegotiation:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-47.11.1/libressl-2.8/ssl/ssl_pkt.c:1200:SSL alert number 100
4707790444:error:140040E5:SSL routines:CONNECT_CR_SRVR_HELLO:ssl handshake failure:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-47.11.1/libressl-2.8/ssl/ssl_pkt.c:585:
Run Code Online (Sandbox Code Playgroud)

Mat*_*ell 5

openssl s_client是一个用于测试 SSL/TLS 连接的工具。因此,它为您提供了对任何已建立的 SSL/TLS 连接具有特殊效果的各种“命令”。您输入的大部分文本只会发送给对方。但如果它看到一个命令,它就会执行它。命令从一行的开头开始,这样的命令之一是单个字母“R”。这会导致 s_client 请求与服务器重新协商。以“RCPT TO”开头的行导致执行此命令。服务器配置为不接受重新协商请求 - 因此您会看到错误。

尝试对 s_client 使用“-ign_eof”标志。这具有禁用这些命令的效果。