openssl verify (): предоставленный ключ param не может быть принудительно введен в открытый ключ для a.файл 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 сертификаты. Вот объяснение разницы между всеми этими разные форматы ключей. В моем понимании!--1--> подобное .cer, однако, я не мог для жизни меня выясните, как разрешить моему скрипту читать my .

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

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

что может быть причиной этой ошибки?

2 ответов


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


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

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

допускаются окончания строк Windows (CR/LF), даже на *Nix-размещенном PHP.