Currently attempting to read a .pem
public key to verify it through 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);
}
With that said, upon executing my script, I receive this error:
openssl_verify(): supplied key param cannot be coerced into a public key in some/path at line X
Originally, I wrote this function to accept .cer
certifications. Here's an explanation of the difference between all these different key formats. To my understanding .pem
are similar to .cer
, however, I could not for the life of me figure out how to allow my script to read my .pem
file.
My question is - what do I need to do in order for my function to read this public key?
EDIT: Upon some Googling, I have tried using file_get_contents()
to a particular path but I would receive the same error.
What could be causing this error?
Upon opening this .pem
file, it was all in one line. It appears each line requires the length of 64 characters, so I made sure each line was 64 lines, and it successfully parsed. Had nothing to do with .cer
.
In addition, the -----BEGIN PUBLIC KEY-----
and -----END PUBLIC KEY-----
lines should contain exactly five dashes on each side. No more, no less. Six is right out.
There may or may not be a newline at the end of the final line.
Windows line endings (CR/LF) are allowed, even on *nix-hosted PHP.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With