использование нулевых шифров в openssl для того, чтобы иметь незашифрованное соединение - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь создать приложение клиент / сервер TLS1.2, которое аутентифицируется с помощью OpenSSL. Я пытаюсь добавить возможность, чтобы соединение между клиентом и сервером не шифровалось

Я пытался добиться этого, установив для шифра значение NULL.

Это инициализациякод для контекста OpenSSL как на клиенте, так и на сервере.

Клиент:

SSL_CTX* InitCTX(const char * certificate, bool verify)
{
    const SSL_METHOD *method;
    SSL_CTX *ctx;
    OpenSSL_add_all_algorithms();  /* Load cryptos, et.al. */
    SSL_load_error_strings();   /* Bring in and register error messages */
    method = TLSv1_2_client_method();// SSLv23_client_method();  /* Create new client-method instance */
    ctx = SSL_CTX_new(method);   /* Create new context */
    if (ctx == NULL)
    {
        ERR_print_errors_fp(stderr);
        abort();
    }


        /*   configure context */
    int mode = verify ? SSL_VERIFY_PEER : SSL_VERIFY_NONE;
    SSL_CTX_set_verify(ctx, mode, nullptr);
    //SSL_CTX_set_cipher_list(ctx, "aNULL:eNULL");
    if (!SSL_CTX_set_cipher_list(ctx, "NULL")) {
        std::cerr << "Error setting ciphers" << std::endl;
        exit(1);
    }
   // SSL_CTX_set_verify_depth(ctx, 4);

    if (!SSL_CTX_load_verify_locations(ctx, certificate, NULL))
    {
        printf("Failed to load root CA certificate.");
        exit(1);
    }

    return ctx;
}

Сервер:


SSL_CTX* InitServerCTX(bool verify)
{
    const SSL_METHOD *method;
    SSL_CTX *ctx;
    OpenSSL_add_all_algorithms();  /* load & register all cryptos, etc. */
    SSL_load_error_strings();   /* load all error messages */
    method = TLSv1_2_server_method();// SSLv23_server_method(); /* create new server-method instance */

    ctx = SSL_CTX_new(method);   /* create new context from method */
    if (ctx == NULL)
    {
        ERR_print_errors_fp(stderr);
        abort();
    }

    const int mode = verify ? SSL_VERIFY_PEER : SSL_VERIFY_NONE;
    SSL_CTX_set_verify(ctx, mode, nullptr);
    SSL_CTX_set_cipher_list(ctx, "NULL");
    return ctx;
}
void LoadCertificates(SSL_CTX* ctx, char* CertFile, char* KeyFile)
{

    /* set the local certificate from CertFile */
    if (SSL_CTX_use_certificate_file(ctx, CertFile, SSL_FILETYPE_PEM) <= 0)
    {
        ERR_print_errors_fp(stderr);
        abort();
    }
    /* set the private key from KeyFile (may be the same as CertFile) */
    if (SSL_CTX_use_PrivateKey_file(ctx, KeyFile, SSL_FILETYPE_PEM) <= 0)
    {
        ERR_print_errors_fp(stderr);
        abort();
    }
    /* verify private key */
    if (!SSL_CTX_check_private_key(ctx))
    {
        fprintf(stderr, "Private key does not match the public certificate\n");
        abort();
    }
}

Я ожидаю, что смогу создать TLS 1.2соединение, которое не шифрует. Вместо этого я получаю следующие ошибки при попытке соединения:

Клиент:

"ошибка: 141A90B5: Подпрограммы SSL: ssl_cipher_list_to_bytes: нет доступных шифров: ssl \ statem \ statem_clnt.c: 3804: Нет шифроввключено для максимальной поддерживаемой версии SSL / TLS "

Сервер:

" Ошибка: 14094438: подпрограммы SSL: ssl3_read_bytes: внутренняя ошибка предупреждения tlsv1: ssl \ record \ rec_layer_s3.c: 1536: предупреждение SSLномер 80 "

Было бы неплохо, если бы я смог добиться этого и в TLS 1.3, но сейчас я благодарен за помощь для TLS 1.2

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