Я пытаюсь внедрить платежную систему, и мне дали пример кода для проверки SSL-сертификата, написанный на PHP. Код выглядит следующим образом:
echo "<strong>1. Verify Certifcate</strong><blockquote>";
#Get DigestValue
echo "<strong>DigestValue:</strong><br>",$sigDigest=$xmlDoc-
>documentElement->getElementsByTagName("DigestValue")->item(0)->nodeValue,"
<br>";
$signedInfo=$xmlDoc->getElementsByTagName("SignedInfo")->item(0)->C14N(true,
true);
#Get SignatureValue
$signature = base64_decode($xmlDoc->documentElement-
>getElementsByTagName("SignatureValue")->item(0)->nodeValue);
#Check Certificate
$ok = openssl_verify($signedInfo, $signature, $pubKey, OPENSSL_ALGO_SHA1);
echo "<p><strong>Status:</strong> ", $ok == 1 ? "Valid" : "Invalid", "
Cetificate.</p></blockquote><hr>";
Проблема, с которой я сталкиваюсь, заключается в том, что я пытаюсь сделать то же самое на Node.js, но когда я пытаюсь проверить это, он каждый раз возвращает false. Я знаю, что здесь был задан похожий вопрос, я попробовал его решение, но это не сработало.
По сути, я пытаюсь сделать то же самое, что и эта строка.
$ok = openssl_verify($signedInfo, $signature, $pubKey, OPENSSL_ALGO_SHA1);
Вот код. Метод проверки находится в функции checkSignature.
exports.verifyTest = function (req, res) {
var keyPath = 'certs/result.xml';
var xml = fs.readFileSync(keyPath);
var parseString = require('xml2js').parseString;
parseString(xml,
{trim : true },
function (err, result) {
if(result.Message && result.Message.OrderStatus == 'APPROVED') {
var orderId = result.Message.OrderID,
signature = result['Message']['Signature'][0]['SignatureValue'],
signedInfo = result['Message']['Signature'][0]['SignedInfo'][0]
['Reference'][0]['DigestValue'];
var valid = checkSignature(signedInfo+"", signature+"");
return res.status(400).send({
message: "Гүйлгээ амжилттай " + valid
});
} else {
return res.status(400).send({
message: "Unsuccessful"
});
}
});
};
function checkSignature(data, sig) {
var pub = fs.readFileSync('certs/public.cert').toString()
var verify = crypto.createVerify('RSA-SHA1');
verify.update(data);
var result = verify.verify(pub,sig,'base64');
return result;
}
Любая помощь будет оценена.