ошибка: 0409A06E: данные подпрограммы rsa слишком велики для размера ключа - PullRequest
0 голосов
/ 07 ноября 2019

Я генерирую ответ SAML, и его необходимо зашифровать и подписать открытым и закрытым ключами. Я сгенерировал private.pem и public.pem в терминале с командами

openssl genrsa -out private.pem 2048
openssl rsa -in ./private.pem -pubout -out public.pem

Затем в nodeJS.

encrypt: function(message) {
    return new Promise(function (resolve, reject) {
        var publicKey = require("fs").readFileSync(__dirname + "/public.pem", "utf8");
        var encrypted = require("crypto").publicEncrypt(publicKey, new Buffer(message));
        resolve(encrypted.toString("base64"));
    });
},

Как только я вызываю сообщение encrypt(xml), я получаю следующую ошибку

{
  library: 'rsa routines',
  function: 'RSA_padding_add_PKCS1_OAEP_mgf1',
  reason: 'data too large for key size',
  code: 'ERR_OSSL_RSA_DATA_TOO_LARGE_FOR_KEY_SIZE'
}

Цель :

Я долженподпишите сообщение согласно демоверсии здесь samltools.com ( Mode: SignMessage ), мое сообщение SAML выглядит как this . ( см. Раздел Ответ SAML ).

  1. Подпишите сообщение
  2. Base64Введите код сообщения

1 Ответ

0 голосов
/ 07 ноября 2019

Проблема здесь в том, что вы не можете напрямую зашифровать с помощью RSA, части данных, которая больше, чем размер ключа.

Удивительно, но я тоже удивился.

В действительности очень мало полезных данных зашифровывается напрямую с помощью RSA или даже эллиптических кривых.

Вы должны использовать RSA Diffie-Hellman для генерации общего секрета, превращения его в симметричный ключ и передачи этого симметричного ключа через RSA.

Подпись файла, на самом деле является подписью хэша файла.

...