OpenSSL SSL_write выбрасывает Запись не удалась - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь опираться на OpenSSL (1.1.1). Но во время записи я получаю Writing Failed (получено из ERR_print_errors). Рукопожатие прошло успешно (вернул 1). Я также пытаюсь ограничить это TLS 1.3

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <openssl/bio.h>
#include <openssl/err.h>
#include <openssl/ssl.h>


int main(int argc, char **argv) {
    char * request = argv[1]
    int request_len = strlen(request)

    SSL_CTX *ctx = SSL_CTX_new(TLS_client_method());
    if (ctx == NULL) {ERR_print_errors_fp(stderr);}
    long options = SSL_OP_NO_SSLv2 | 
        SSL_OP_NO_SSLv3 | 
        SSL_OP_NO_TLSv1 | 
        SSL_OP_NO_TLSv1_2;
    SSL_CTX_set_options(ctx, options);
    SSL *ssl = SSL_new(ctx);
    if (ssl == NULL) {ERR_print_errors_fp(stderr);}

    BIO * bio = BIO_new_connect("google.com:443")
    if (bio == NULL) {ERR_print_errors_fp(stderr);}
    SSL_set_bio(ssl, bio, bio);
    if (SSL_connect(ssl) != 1) {ERR_print_errors_fp(stderr);}
    if (SSL_write(ssl, request, request_len) !=1) {ERR_print_errors_fp(stderr);}
}

1 Ответ

0 голосов
/ 06 ноября 2019

SSL_write выход проверен неправильно. Выводит положительную длину отправляемых данных.

Вместо этого она должна быть

if (SSL_write(ssl, request, request_len) < 1) {ERR_print_errors_fp(stderr);}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...