gpt4 book ai didi

c++ - 向电子邮件服务器发送 STARTTLS 命令后必须发送哪些数据

转载 作者:可可西里 更新时间:2023-11-01 11:26:37 29 4
gpt4 key购买 nike

我正在用 C++ 编写电子邮件客户端,使用 Winsock2 API 从 Gmail 帐户通过 SMTP 发送电子邮件。我没有使用任何其他第三方库。

我已经通过端口587(用于TLS)连接到Gmail服务器并发送了基本的EHLO和STARTTLS命令,但我的问题是,在发送STARTTLS命令后我应该具体发送什么数据?

为清楚起见,这是服务器输出:

This is the server output for clarity

显然 TLS 握手是在 STARTTLS 命令之后进行的,但是在 TLS 握手期间必须发送的第一条和后续数据是什么?根据我的阅读,它应该是二进制数据交换安全证书等,但我找不到具体应该首先发送哪些数据。

我搜索了许多与此类似的问题,但没有找到说明必须在 STARTTLS 之后发送的特定数据的答案。我知道 OpenSSL 的存在,我不会接受任何告诉我安装它的答案。

最佳答案

SMTP STARTTLS 命令的语义和处理规则记录在 RFC 3207 中.

在您收到对 STARTTLS 命令的成功 220 响应后,您必须开始 TLS 握手以建立加密以加密/解密后续 SMTP 命令/响应。握手完成后,SMTP 状态将重置,因此您必须发出新的(现已加密的)EHLO 命令,然后根据需要继续执行剩余的(加密的)SMTP 命令。

MSDN 记录了 Transport Layer Security Protocol 的高级概述, 以及 TLS Handshake Protocol 的分步说明.每个步骤的具体细节记录在 RFC 2246 的第 7 节中(TLS 1.0), RFC 4346 (TLS 1.1) 和 RFC 5246 (TLS 1.2)。

因此,除非您打算从头开始实现 TLS(请不要!!),否则您需要使用第三方库,例如 OpenSSL,或者您可以使用 Microsoft 的 Secure Channel API,为您处理 TLS 握手和后续加密。

关于c++ - 向电子邮件服务器发送 STARTTLS 命令后必须发送哪些数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33661956/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com