Запуск SSLSocket асинхронно - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь зашифровать данные, проходящие через сокет, используя OpenSSL. Моя операционная система Linux. Проблема со стороны клиента.


Этот код успешно отправляет SSL с использованием BIO:


    m_pSSL = SSL_new(m_pCTX);

    m_rBIO = BIO_new(BIO_s_mem());
    m_wBIO = BIO_new(BIO_s_mem());

    SSL_set_fd(m_pSSL, m_nSocketId);   /* attach the socket descriptor */

    if ( SSL_connect(m_pSSL) == -1 )   /* perform the connection */
    {

        close(nSock);
        return false;
    }

    SSL_set_bio(m_pSSL, m_rBIO, m_wBIO);

Отправьте код


    char buf[MEM_BUFFER_SIZE] = {0, };

    int writtenLength = SSL_write(m_pSSL, pbuf, size);

    int bioWrittenLength = BIO_number_written(m_wBIO);

    int len = BIO_read(m_wBIO, buf, bioWrittenLength);

    ssize_t s = send(m_nSocketId, buf, bioWrittenLength, MSG_EOR | MSG_NOSIGNAL);

Однако , получение с использованием SSL не удалось:

char buf[MEM_BUFFER_SIZE] = {0, };

ssize_t s = recv(m_nSocketId, buf, size, MSG_DONTWAIT);

if(s < 0)
{
    if(errno != EAGAIN) {
        return -1;
    }

    return 0;
}


int writtenLength = BIO_write(m_rBIO, buf, s);

if(writtenLength <= 0) {
    return -1;
}

int bioWrittenLength = BIO_number_written(m_rBIO); // 복호화된 내용의 길이를 가져온다.


s = SSL_read(m_pSSL, pbuf,size);

if(s <= 0)
{
    int error = SSL_get_error(m_pSSL, bioWrittenLength);

}

Возвращаемое значение SSL_read всегда равно -1, а возвращаемое значение SSL_get_error всегда равно 0.

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