openssl_verify():提供的密钥参数不能强制转换为.pem文件的公钥

时间:2014-10-16 14:20:15

标签: php openssl

目前正在尝试阅读.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认证。以下是对所有这些different key formats之间差异的解释。据我所知,.pem.cer类似,但是,在我的生活中,我无法弄清楚如何允许我的脚本阅读我的.pem文件。

我的问题是 - 为了让我的函数读取这个公钥,我需要做些什么?

编辑:在一些谷歌搜索,我尝试使用file_get_contents()到特定的路径,但我会收到相同的错误。

可能导致此错误的原因是什么?

2 个答案:

答案 0 :(得分:5)

打开此.pem文件后,它全部在一行中。看起来每行需要64个字符的长度,所以我确保每行是64行,并且它成功解析。与.cer没有任何关系。

答案 1 :(得分:3)

此外,-----BEGIN PUBLIC KEY----------END PUBLIC KEY-----行每边应包含正好五个短划线。不多也不少。

在最后一行的末尾可能有也可能没有换行符。

允许使用Windows行结尾(CR / LF),即使在* nix托管的PHP上也是如此。