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


openssl_verify(): supplied key param cannot be coerced into a public key for a .pem file

当前正在尝试读取.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文件。

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

编辑:在谷歌上搜索后,我曾尝试将file_get_contents()用于特定路径,但我会收到同样的错误。

是什么原因导致了这个错误?

打开这个.pem文件时,所有内容都在一行中。似乎每行都需要64个字符的长度,所以我确保每行都是64行,并成功解析了它。与.cer无关。

此外,-----BEGIN PUBLIC KEY----------END PUBLIC KEY-----行每侧应包含正好五个短划线。不多不少。六号就在外面。

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

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