Openssl_verify(): указанный ключевой параметр не может быть принудительно введен в открытый ключ для файла .pem

Вопрос:В настоящее время пытается прочитать открытый ключ .pem, чтобы проверить его через openssl. /** * Check whether the signed message sent back by the server is * correct or not. */ function check($str, $MAC) { $fp = fopen( dirname(__FILE__) . '/rsa_public_key.pem', 'r' ); $cert = fread($fp, 8192); fclose($fp); $pubkeyid = openssl_get_publickey($cert); return openssl_verify($str, $MAC, $pubkeyid);

Вопрос:

В настоящее время пытается прочитать открытый ключ .pem, чтобы проверить его через openssl.

/** * Check whether the signed message sent back by the server is * correct or not. */ function check($str, $MAC) { $fp = fopen( dirname(__FILE__) . ‘/rsa_public_key.pem’, ‘r’ ); $cert = fread($fp, 8192); fclose($fp); $pubkeyid = openssl_get_publickey($cert); return openssl_verify($str, $MAC, $pubkeyid); }

С учетом сказанного, после выполнения моего script, я получаю эту ошибку:

openssl_verify(): supplied key param cannot be coerced into a public key in some/path at line X

Первоначально я написал эту функцию, чтобы принять сертификаты .cer. Здесь объясняется разница между всеми этими разными ключевыми форматами. Насколько я понимаю, .pem похожи на .cer, однако я не мог на всю жизнь понять, как разрешить моему script читать мой файл .pem.

Мой вопрос: что мне нужно сделать, чтобы моя функция читала этот открытый ключ?

РЕДАКТИРОВАТЬ: После некоторого Googling я попытался использовать file_get_contents() для определенного пути, но я бы получил ту же ошибку.

Что может вызвать эту ошибку?

Лучший ответ:

После открытия этого файла .pem все было в одной строке. Кажется, каждая строка требует длины 64 символа, поэтому я убедился, что каждая строка имеет 64 строки и успешно анализируется. Не имеет ничего общего с .cer.

Ответ №1

Кроме того, строки ——BEGIN PUBLIC KEY—— и ——END PUBLIC KEY—— должны содержать ровно пять тире с каждой стороны. Не больше, не меньше.

В конце последней строки может быть или не быть новая строка.

Конечные строки Windows (CR/LF) разрешены даже на * nix-размещенном PHP.

Оцените статью
Добавить комментарий