Для тестирования я хочу создать 2 экземпляра SSL * и позволить им отправлять данные друг другу.
После завершения рукопожатия я могу без проблем отправлять данные с клиента на сервер.Отправка данных с сервера на клиент завершается с ошибкой: 'ошибка: 1408F119: процедуры SSL: ssl3_get_record: сбой расшифровки или неверная запись mac'
Следующий код используется дляпри отправке данных в обоих случаях экземпляры SSL * основаны на BIO памяти, проверки на ошибки были удалены для удобства чтения.
SSL* source;
SSL* destination;
BIO *r_bio;
BIO *w_bio;
int sRc;
//....
r_bio = SSL_get_rbio(destination);
w_bio = SSL_get_wbio(source);
//Encrypt message
printf("Buffer before encryption: %d Bytes -> 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x...\n", _g_buffer_lenght, _g_buffer[0], _g_buffer[1], _g_buffer[2], _g_buffer[3], _g_buffer[4]);
ERR_clear_error();
sRc = SSL_write(source, _g_buffer, _g_buffer_lenght);
if (sRc <= 0) {
_log_openssl_error_queue();
return -1;
}
_g_buffer_lenght = BIO_ctrl_pending(w_bio);
BIO_read(w_bio, _g_buffer, _g_buffer_lenght);
printf("Buffer after encryption: %d Bytes -> 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x...\n", _g_buffer_lenght, _g_buffer[0], _g_buffer[1], _g_buffer[2], _g_buffer[3], _g_buffer[4]);
//Decrypt message
BIO_flush(r_bio);
BIO_write(r_bio, _g_buffer, _g_buffer_lenght);
ERR_clear_error();
sRc = SSL_read(destination, _g_buffer, _g_buffer_lenght);
if (sRc <= 0) {
_log_openssl_error_queue();
return -1;
}
_g_buffer_lenght = sRc;
printf("Buffer after decryption: %d Bytes -> 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x...\n", _g_buffer_lenght, _g_buffer[0], _g_buffer[1], _g_buffer[2], _g_buffer[3], _g_buffer[4]);
Запись, которая создается после шифрования, выглядит правильно (правильный тип, версия и длина).
Требуется ли дополнительный шаг при отправке данных с сервера на клиент, я ожидаю, что 2 пира будут равны после завершения рукопожатия?