SMTPS:OpenSSL - SSL 例程:SSL23_GET_SERVER_HELLO:未知协议 s23_clnt.c:787:

2024-04-19

我使用 OpenSSL 来加密硬件发送的一些电子邮件。但是,每当我尝试调用 SSL_connect() 时,我都会得到: SSL例程:SSL23_GET_SERVER_HELLO:未知协议

发送“EHLO”和“STARTTLS”后,我调用以下函数:

SSL_CTX *ctx = NULL;
SSL *ssl = NULL;

    void CreateTLSSession(int sockfd)
    {
        printf("///////////////creating TLS Session/////////////////////\n");
        SSL_library_init();
        SSL_load_error_strings();
        OpenSSL_add_all_algorithms();
        ctx = SSL_CTX_new(SSLv23_client_method());
        if (ctx == NULL)
        {
            printf("failed to initialize context\n");
            return;
        }
        SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2);
        ssl = SSL_new(ctx);
        if (!SSL_set_fd(ssl, sockfd))
        {
            printf("failed to bind to socket fd\n");
            return;
        }
        if (SSL_connect(ssl) < 1)
        {
            ERR_print_errors_fp(stdout);
            fflush(stdout);
            printf("SSL_connect failed\n");
            return;
        }
    }

我尝试连接到:

  • smtp.live.com:587 --> SSL 例程:SSL23_GET_SERVER_HELLO:未知 协议 s23_clnt.c:787:
  • smtp.live.com : 25 --> SSL 例程:SSL23_GET_SERVER_HELLO:未知协议 s23_clnt.c:787:
  • smtp.gmail.com:587 --> SSL 例程:SSL23_GET_SERVER_HELLO:未知 协议 s23_clnt.c:787:
  • smtp.gmail.com : 465 --> 服务器根本没有响应!
  • smtp.gmail.com : 25 --> SSL 例程:SSL23_GET_SERVER_HELLO:未知
    协议 s23_clnt.c:787:

我尝试了不同的端口,因为对此的一些类似问题表明,此类错误通常与使用错误的 SSL 端口有关。

我在这里错过了什么吗?

UPDATE:

所有其他方法(即 TLSv1_1_method()、SSLv3_method() ...)都会导致 SSL3_GET_RECORD:版本号错误

UPDATE:

我能够在wireshark上观察到以下内容:

"EHLO"

“乐意效劳”

“启动TLS”

“准备好开始”

-->现在我调用上面的函数

不可读的请求(加密)

无法读取的回复(加密)

--> 错误


端口 587 和 25 上的 SMTP 服务器通常是纯文本,并且仅在初始 SMTP 对话框和来自客户端的 STARTTLS 命令后才会切换到 TLS。在纯文本套接字上尝试 SSL_connect 将失败。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SMTPS:OpenSSL - SSL 例程:SSL23_GET_SERVER_HELLO:未知协议 s23_clnt.c:787: 的相关文章

随机推荐