openssl_pkey_get_private возвращает false - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь проверить некоторые закрытые ключи, но метод php openssl_pkey_get_private () всегда возвращает false openssl_error_string () возвращает:

ошибка: 0906D06C: процедуры PEM: PEM_read_bio: нет начальной строки

    $return = openssl_pkey_get_private($path.'_priKEY.pem');
    if ($return === false) {
        var_dump(openssl_error_string());
    }

Пробовал с этимзакрытый ключ, извлеченный из файла .pfx, другой из файла .p12 и даже самогенерируемый ключ (с openssl).Уже пробовали с "RSA PRIVATE KEY", "ENCRYPTED PRIVATE KEY" и "PRIVATE KEY".Ничего не меняется.

Содержание закрытого ключа:

-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0B
[......................]
Wxdadnf7MB7DicckIZTKVy1L
-----END PRIVATE KEY-----

1 Ответ

0 голосов
/ 02 октября 2018

Похоже, вы не указали правильный формат для пути к файлу.Убедитесь, что он начинается с file://, за которым следует абсолютный или относительный путь.Да, если вы выберете абсолютный путь, то путь к имени файла будет примерно таким: file:///absolute/path/to/keyfile.pem, начиная с трех слешей.Для относительных путей это будет file://relative/path/to/keyfile.pem.

. В соответствии с документацией для openssl_pkey_get_private () , ключ можно указать либо как путь к файлу, либо как строку, содержащуюфактический ключ.Только если значение начинается с file://, оно интерпретируется как путь (URI) к файлу.В противном случае значение интерпретируется как строка, содержащая ключ в кодировке PEM.В последнем случае он ожидает стартовую строку, которую он распознает как PEM, например -----BEGIN PRIVATE KEY-----.Вот почему вы получаете это сообщение об ошибке, ваш аргумент не начинается ни с file://, ни с начальной строки PEM.

Если вам не нравится формат пути file://, вы всегда можете прочитать содержимоеперед тем, как предоставить openssl_pkey_get_private(), напишите что-то вроде:

$return = openssl_pkey_get_private(file_get_contents($path.'_priKEY.pem'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...