我通过使用 TLS 1.2 的网络负载均衡器 (NLB) 使用 ECS Fargate 来托管 SMTP 服务,该服务使用标准 SMTP 中断与客户端进行通信。
我正在通过
openssl
测试该服务。
这在本地和 Fargate 上都运行良好:
$openssl s_client -connect xxx.com:443
HELO
250 OK
MAIL FROM:[email protected]
250 OK
QUIT
250 OK
但是,Fargate 服务适用于 NLB/Fargate 上的所有 SMTP 命令,除了以字符
R
开头的任何命令,例如RCPT TO:
。
我得到
RENEGOTIATING
,然后是 connection close
,这在本地不会发生。
$openssl s_client -connect mynlbhost.tampabayclosure.com:443
HELO
250 Hello
MAIL FROM:[email protected]
250 OK
RCPT TO:[email protected]
RENEGOTIATING
write:errno=54
我尝试了
openssl s_client -connect host:port -no_renegotiation
和openssl s_client -connect host:port -no_renegotiation -tls1_2
,但都没有成功。
问题是什么?
这些解决方案都有效:
使用 TLS v1.3
使用
openssl s_client -quiet
抑制 R
和 Q
字符的交互式解释
使用
rcpt to:
(您可以这样做,因为根据 RFC 5321,SMTP 命令不区分大小写)
问题是什么?
openssl s_client
有关:
当交互使用时(这意味着既没有给出 -quiet 也没有给出 -ign_eof),并且没有给出 -adv 或 -nocommands,则进入“Basic”命令模式。在此模式下,某些命令被识别以执行特殊操作。 这些命令是一个字母,必须出现在行首。
R
重新协商 SSL 会话(仅限TLSv1.2 及更低版本)。
这就是为什么当您输入
RENEGOTIATING
或任何其他带有 RCPT TO:
的命令 starting 时,您会看到 R
消息,然后连接关闭。
请注意,
R
的位置很重要 - 这就是为什么您在使用MAIL FROM:
时没有遇到此问题,即使它包含R
。
本地不会发生
这很可能是因为您没有在本地使用 SSL。