Я пытаюсь зашифровать данные, проходящие через сокет, используя 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.