我们正在尝试使用 AWS KMS 中的非对称密钥进行加密和解密。 key的配置如下:
在 NodeJS 中,我们通过 crypto.publicEncrypt 使用公钥进行加密:
const encryptRSAPayload = (buffer, publicKey) => {
const encryptedBuffer = crypto.publicEncrypt(
{
key: publicKey,
oaepHash: 'sha256',
padding: crypto.constants.RSA_PKCS1_OAEP_PADDING,
},
buffer
);
return encryptedBuffer;
};
我们使用这样的函数(在最小重现期间从本地文件读取公钥):
const plainText = '12345678910';
const encrypted = await encryptRSAPayload(Buffer.from(plainText), publicKey);
现在,四名开发人员运行了完全相同的代码(压缩,带有公钥等),这种情况正在发生:
注意:所有开发人员都使用最新的 OSX 系统。
我们中的两个人可以使用 AWS 解密我们从加密函数生成的任何内容,而另外两个人则不能(失败,并显示 IvalidCiphertext: null)。
来自无法加密 -> 解密的一台机器的加密的 Base64 字符串,无法在任何其他机器上解密。
来自可以加密 -> 解密的机器之一的加密的 Base64 字符串可以在任何机器的 aws 中解密。
到目前为止,我已经花了两天时间在这上面,但我有点不知道该怎么做。有任何想法吗?
经过几天的调试,问题解决了。该问题源于 OSX 附带的 OpenSSL 版本。对我来说,这是 LibreSSL 2.8,它不包括 OAEP 中使用的一些填充标志,也不将哈希更改为 sha256(而不是 sha1)。
解决方案是:
- 通过 Homebrew 安装 OpenSSL 并设置 PATH 环境以使用该版本而不是附带版本。
- 重新安装任何已安装的节点版本以重新链接到正确的 OpenSSL 版本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)