В настоящее время пытается прочитать открытый ключ .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.