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); } 

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

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

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

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

EDIT: В некоторых Googling я попытался использовать file_get_contents() для определенного пути, но я бы получил ту же ошибку.

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

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

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

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

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