Функция проверки Node.js не проверяет подпись, когда это делает командная строка openssl

Я пытаюсь использовать криптомодуль Node.js для проверки подписи некоторых данных. Я использую Node.js 0.8.0.

Данные в файле были хешированы с использованием алгоритма MD5 и подписаны с использованием закрытого ключа RSA, а подпись сохранена в отдельный файл. Все это было сделано с использованием библиотек Java.

Если я использую openssl для проверки подписи, это будет успешно, используя:

openssl dgst -verify mykey.pem -signature example.sig hello.txt

Он отвечает Verified OK. Если я изменяю один символ hello.txt, он не проверяется. Я могу добавить параметр -MD5 к приведенной выше команде, и она все равно будет работать, но я предполагаю, что это значение по умолчанию, но если я скажу -MD4 или -SHA, это не проверит. Это все хорошо.

Если я затем попытаюсь использовать криптомодуль Node, который обертывает openssl, я не смогу заставить эту проверку работать.

Мой пример кода:

var crypto = require("crypto");
var fs = require("fs");

var data = fs.readFileSync("./hello.txt");
var pubkey = fs.readFileSync("./mykey.pem", "utf8");
var signature = fs.readFileSync("./example.sig");

var verifier = crypto.createVerify ('RSA-MD5');
verifier.update (data);
var success = verifier.verify (pubkey, signature);
console.log(success);

Это всегда выводит false. Я пробовал:

  • чтение данных в кодировке «utf8» и «ascii», так как это текстовый файл.
  • чтение ключа в кодировке 'ascii' (У меня есть основания полагать, что ключ в порядке, так как я получал некоторые исключения, когда в какой-то момент загружал неправильно закодированный ключ)
  • использование MD5 вместо RSA -MD5 в качестве алгоритма дайджеста
  • загрузка подписи в кодировке base64, а не двоичной, и установка параметра base64 в функцию проверки.

Я неправильно понимаю, что мой код выполняет ту же операцию, что и показанная здесь командная строка openssl? Любые предложения о том, как решить эту проблему?

Обновление :Я также пытался использовать самоподписанный -доверенный сертификат, а не просто ключ. Я подтвердил, что openssl проверяет сертификат, но криптобиблиотека узла не проверяет файл.

5
задан iandotkelly 29 June 2012 в 15:15
поделиться