当前位置: 首页 > 知识库问答 >
问题:

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

衡子安
2023-03-14

当前正在尝试读取<code>。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():不能将提供的密钥参数强制为X行某个/路径中的公钥

最初,我编写这个函数是为了接受< code >。cer认证。下面解释一下所有这些不同密钥格式之间的区别。据我所知<代码>。pem与< code >相似。cer,但是,我怎么也想不出如何让我的脚本读取我的< code >。pem文件。

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

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

是什么导致了这个错误?

共有2个答案

艾浩广
2023-03-14

此外,-----BEGIN PUBLIC KEY----------END PUBLIC KEY-----行的每边应正好包含五个破折号。没有更多,没有更少。六个是正确的。

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

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

谷森
2023-03-14

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

 类似资料: