我遇到的问题是,在调用
openssl_verify()
后,返回结果为(0),并出现以下错误:
我尝试解决这个问题,但是网上关于这些错误和函数的文档非常少。OpenSSL error openssl_verify error:04091068:rsa routines:INT_RSA_VERIFY:bad signature
我的当前代码如下:
// get the header post to my php file by PayPal
$headers = apache_request_headers();
// get the body post to me php file by PayPal
$body = @file_get_contents('php://input');
$json = json_decode($body);
// TransmissionId|TransmissionTimeStamp|WebhookId|CRC32 as per PayPal documentation
$sigString = $headers['Paypal-Transmission-Id'].'|'.$headers['Paypal-Transmission-Time'].'|'.$json->id.'|'.crc32($body);
// $headers['Paypal-Cert-Url'] contains the "-----BEGIN CERTIFICATE---MIIHmjCCBoKgAwIBAgIQDB8 ... -----END CERTIFICATE-----"
$pubKey = openssl_pkey_get_public(file_get_contents($headers['Paypal-Cert-Url']));
// and this is the call to verify that returns result (0)
$verifyResult = openssl_verify($sigString, base64_decode($headers['Paypal-Transmission-Sig']), $pubKey, 'sha256WithRSAEncryption');
与我使用的参考代码不同的是,我没有使用
openssl_pkey_get_details($pubKey)
,因为除了现有的签名错误之外,我还会收到以下错误消息:此外,我尝试了一种变化,即不在标题上使用OpenSSL错误openssl_verify error:0906D06C:PEM routines:PEM_read_bio:no start line OpenSSL错误openssl_verify error:04091068:rsa routines:INT_RSA_VERIFY:bad signature
base64_decode()
,但将返回相同的结果(0),并显示以下错误消息:签名哪里出了问题?OpenSSL错误openssl_verify error:04091077:rsa routines:INT_RSA_VERIFY:wrong signature length
$json->id
,因为这是事件的ID,而不是Web钩子的ID。Web钩子ID不会随事件一起发送 - 你必须在此处使用一个常量。 - IVO GELOV