SMTP:SSL_connect失败但没有错误

时间:2014-04-03 10:01:51

标签: c email smtp openssl

我遇到了openssl库的问题。发送EHLOSTARTTLS后,我正在调用以下函数:

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;
        }
    }

但是,SSL_connect失败但不会打印任何错误!

这是我的代码的输出:(包括服务器的回复)

220 mx.google.com ESMTP x3sm39000551eep.17 - gsmtp 




//////////////////////////EHLO////////////////////////// 
250-mx.google.com at your service, [80.149.109.201] 
250-SIZE 35882577 
250-8BITMIME 
250-STARTTLS 
250-ENHANCEDSTATUSCODES 
250 CHUNKING 




//////////////////////////STARTTLS////////////////////////// 
220 2.0.0 Ready to start TLS 




///////////////creating TLS Session///////////////////// 
SSL_connect failed 

所以ERR_print_errors_fp(stdout)没有做任何事情!

知道为什么会这样吗?

是的,我试图连接到smtp.gmail.com:587

2 个答案:

答案 0 :(得分:1)

我没有看到加载的私钥文件或证书文件。使用SSL_CTX_use_certificate_file和SSL_CTX_use_PrivateKey_file。

答案 1 :(得分:0)

我设法最终解决了这个问题。底层套接字是非阻塞的,因此SSL_connect不会立即连接。使用select解决了问题