错误:0409A06E:RSA例程数据对于密钥大小而言过大

时间:2019-11-06 23:59:11

标签: node.js cryptography saml

我正在生成SAML响应,因此需要对其进行加密并用公钥和私钥签名。我使用以下命令在终端中生成了private.pempublic.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模式:SignMessage ),我的SAML消息看起来像this。 (请参阅SAML响应部分)。

  1. 签署消息
  2. Base64编码消息

1 个答案:

答案 0 :(得分:0)

这里的问题是您不能直接使用RSA加密,这是一个大于密钥大小的数据。

令我惊讶的是,它也让我感到惊讶。

实际上,很少有有效载荷数据直接使用RSA甚至椭圆曲线直接加密。

您应该使用RSA Diffie-Hellman生成共享机密。

文件签名实际上是文件哈希的签名。