openssl_seal не работает ошибка: 0E06D06 C: подпрограммы файла конфигурации: NCONF_get_string: нет значения - PullRequest
1 голос
/ 06 мая 2020

Я пытаюсь запечатать / открыть файл. Сбой шифрования, и возникает следующая ошибка.

error:0E06D06C:configuration file routines:NCONF_get_string:no value

Вот пример кода, который может воспроизвести проблему

    // Generate key pair and keep them safe...
    $key = openssl_pkey_new([
        'private_key_bits' => 4096,
        'private_key_type' => OPENSSL_KEYTYPE_EC,
        'curve_name' => 'prime256v1',
    ]);

    $privKey = null;
    openssl_pkey_export($key, $privKey);
    $pubKeyDetails = openssl_pkey_get_details($key);
    $pubKey = $pubKeyDetails['key'];
    openssl_free_key($key);

    // Load the pubkey to encrypt
    $key = openssl_pkey_get_public($pubKey);
    $data = file_get_contents('of-some-pretty-large-file');


    // ----- This here fails -----
    if (openssl_seal($data, $sealed, $eKeys, [$key]) === false) {
        echo "Encryption failed\n";
        echo openssl_error_string() . "\n";
        exit;
    }
    openssl_free_key($key);

    $key = openssl_pkey_get_private($privKey);
    if (openssl_open($sealed, $decryptedData, $eKeys[0], $key)) {
        echo ($decryptedData === $data ? "Matched\n" : "Trash\n");
    }
    openssl_free_key($key);

1 Ответ

0 голосов
/ 06 мая 2020

Сообщение об ошибке

error:0E06D06C:configuration file routines:NCONF_get_string:no value

вызвано не openssl_seal, а openssl_pkey_new. Это не влияет на функциональность, т.е. ключ сгенерирован успешно, см. здесь и здесь . Это также относится к опубликованному коду, который генерирует закрытый ключ E C в формате SEC1 и ключ publi c в формате X.509.

Метод PHP openssl_seal основан на функции OpenSSL EVP_SealInit, EVP_SealUpdate и EVP_SealFinal, здесь . В соответствующей документации OpenSSL в разделе Notes * описано следующее:

Ключ publi c должен быть RSA, потому что это единственный OpenSSL publi c ключевой алгоритм, который поддерживает передачу ключей.

Это означает, что openssl_seal работает только с RSA или RSA ключом. Если в опубликованном коде используется следующее:

$key = openssl_pkey_new([
    'private_key_bits' => 4096,
    'private_key_type' =>  OPENSSL_KEYTYPE_RSA
]);

расшифровка и шифрование работают должным образом.

...