SSL_write возвращает SSL_ERR_SYSCALL, а Err_get_error () возвращает 0 - PullRequest
0 голосов
/ 21 ноября 2018

Я отредактировал свой код, и теперь он выглядит так.Сервер пытается записать несколько байтов в сокет.

    int r;
    FILE *fp;
    fp = stderr;

    const SSL_METHOD *method;
    method = SSLv23_server_method();
    ERR_clear_error();

    if ( !ctx)
    {
        ctx = SSL_CTX_new(method);
        if (!ctx) {
            return 0;
        }

        SSL_CTX_set_ecdh_auto(ctx, 1);



       if (SSL_CTX_use_certificate_file(ctx, "/home/cert.pem", SSL_FILETYPE_PEM) <= 0) {            
           ERR_print_errors_fp(fp);
        }

        if (SSL_CTX_use_PrivateKey_file(ctx, "/home/key.pem", SSL_FILETYPE_PEM) <= 0 ) {
            ERR_print_errors_fp(fp);
        }
    }

    if (!ctx) {
        return;
     }

    SSL *ssl;
    ssl = SSL_new(ctx);
    SSL_set_fd(ssl, fd);

    ERR_clear_error();

     if (SSL_accept(ssl) <= 0) {
        ERR_print_errors_fp(fp);
     }

    int rce = 0;
    ERR_clear_error();

    char *buffer = (char *) malloc(iova.iov_len);
    memcpy(buffer, iova.iov_base, iova.iov_len);

    r = SSL_write(ssl, buffer, (int)iova.iov_len);

    // check how many bytes were written
    if ( r <= 0 )
    {
        ERR_print_errors_fp(fp);
        int err = errno;

        switch(SSL_get_error(ssl,r)){
            case SSL_ERROR_NONE:
                continue;
            case SSL_ERROR_ZERO_RETURN:
                syslog(LOG_INFO, "SSL read encountered an error %d. Peer disconnected.", SSL_ERROR_ZERO_RETURN);
                break;
            case SSL_RECEIVED_SHUTDOWN:
                syslog(LOG_INFO, "SSL read encountered an error %d. Shutdown.", SSL_RECEIVED_SHUTDOWN);
                break;
            case SSL_ERROR_SYSCALL:
                syslog(LOG_INFO, "SSL write encountered an error %d and %lu. SYSCALL", SSL_get_error(ssl,r), ERR_get_error());
                break;
            default:
                syslog(LOG_INFO, "SSL write encountered an error %d and %d. Quitting", SSL_get_error(ssl,r), err);
                break;
        }

Пара проблем, которые я не смог выяснить -

  1. SSL_accept () не удается

  2. Затем SSL_write () завершается ошибкой с SSL_RECEIVED_SHUTDOWN и ошибкой строки = error:00000002:lib(0):func(0):system lib

Что я здесь не так делаю с SSL_accept и SSL_write()?


Я пытаюсь использовать Openssl для выполнения SSL_write(), и я получаю следующую ошибку во время SSL_write().Сервер пытается записать несколько байтов в сокетное соединение fd -

error:140D0114:SSL routines:SSL_write:uninitialized:ssl_lib.c:1039:
Error: error:00000005:lib(0):func(0):DH lib

Вот мой код

    SSL *ssl;
    if ( !ctx )
      return 0; 
    ssl = SSL_new(ctx);

    //SSL_set_fd(ssl, fd);

    BIO *sbio = NULL;
    sbio = BIO_new_socket(fd, BIO_NOCLOSE);
    SSL_set_bio(ssl, sbio, sbio);
    ERR_clear_error();

    FILE *fp;
    fp = stderr;
    r = SSL_write(ssl, buffer, (len);

    if ( r <= 0 )
    {
            ERR_print_errors_fp(fp);

            switch(SSL_get_error(ssl,r)){
                case SSL_ERROR_NONE:
                    syslog(LOG_INFO, "No real error. Continue.");
                    continue;
                case SSL_ERROR_ZERO_RETURN:
                    syslog(LOG_INFO, "SSL read encountered an error %d. Peer disconnected.", SSL_ERROR_ZERO_RETURN);
                    break;
                case SSL_RECEIVED_SHUTDOWN:
                    syslog(LOG_INFO, "SSL read encountered an error %d. Shutdown.", SSL_RECEIVED_SHUTDOWN);
                    break;
                case SSL_ERROR_SYSCALL:
                    syslog(LOG_INFO, "SSL write encountered an error %d and %lu. SYSCALL", SSL_get_error(ssl,r), ERR_get_error());
                    break;
                default:
                    syslog(LOG_INFO, "SSL write encountered an error %d and %d. Quitting", SSL_get_error(ssl,r), err);
                    break;
    }

Контекст SSL (ctx) действителен с самого начала.

Я попытался найти объяснение ошибки, но не нашел ее.Также я не нашел подобную проблему, которая бы разрешила ее.Может ли кто-нибудь помочь мне понять, что я могу сделать для дальнейшей отладки этого?Или если у них есть решение?

Openssl версия 1.0.2g

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...