当前正在尝试读取.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上也是如此。