Проверка SSL-сертификата Nodejs - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь внедрить платежную систему, и мне дали пример кода для проверки 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;

}

Любая помощь будет оценена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...