目前正在尝试阅读.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()
到特定的路径,但我会收到相同的错误。
可能导致此错误的原因是什么?
答案 0 :(得分:5)
打开此.pem
文件后,它全部在一行中。看起来每行需要64个字符的长度,所以我确保每行是64行,并且它成功解析。与.cer
没有任何关系。
答案 1 :(得分:3)
此外,-----BEGIN PUBLIC KEY-----
和-----END PUBLIC KEY-----
行每边应包含正好五个短划线。不多也不少。
在最后一行的末尾可能有也可能没有换行符。
允许使用Windows行结尾(CR / LF),即使在* nix托管的PHP上也是如此。