小编Jac*_*ell的帖子

C 上的 SMTP:通过 OpenSSL 的 STARTTLS

我正在使用 openssl 构建与 gmail.com:25 的安全 smtp 连接。这样我就可以成功连接到服务器并发送命令 STARTTLS (我收到 220 2.0.0 Ready to start TLS)。然后在不断开连接的情况下执行以下代码:

SSL_METHOD* method = NULL;

SSL_library_init();
SSL_load_error_strings();

method = SSLv23_client_method();

ctx = SSL_CTX_new(method);
if (ctx == NULL)
{
    ERR_print_errors_fp(stderr);
}
SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2);
ssl = SSL_new(ctx);
if (!SSL_set_fd(ssl, socket))
{
        ERR_print_errors_fp(stderr);
        return;
}
if (ssl)
{

    if (SSL_connect((SSL*)ssl) < 1)
    {
        ERR_print_errors_fp(stderr);
    }
    // then i think i need to send EHLO
}
Run Code Online (Sandbox Code Playgroud)

但调用 SSL_connect 后出现错误:

24953:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:601:
Run Code Online (Sandbox Code Playgroud)

如果我使用 SSLv3_client_method 我会收到错误:

18143:error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number:s3_pkt.c:284.
Run Code Online (Sandbox Code Playgroud)

如果 …

c linux ssl openssl smtp

4
推荐指数
1
解决办法
6983
查看次数

标签 统计

c ×1

linux ×1

openssl ×1

smtp ×1

ssl ×1