这是我的代码的一部分,该代码使用crypto,并且可以与Node v8.15.0正常工作:
const crypto = require('crypto');
...
const sign = crypto.createSign('DSA');
当我切换到节点10 时:
nvm install 10
node --version
v10.15.1
相同的源代码返回错误:
Error: Unknown message digest
at new Sign (internal/crypto/sig.js:26:16)
at Object.createSign (crypto.js:137:10)
如何在节点10和加密中获取 DSA ?
其他信息:
节点10 crypto.getHashes()
返回(没有DSA!):
[ 'RSA-MD4',
'RSA-MD5',
'RSA-MDC2',
'RSA-RIPEMD160',
'RSA-SHA1',
'RSA-SHA1-2',
'RSA-SHA224',
'RSA-SHA256',
'RSA-SHA384',
'RSA-SHA512',
'blake2b512',
'blake2s256',
'md4',
'md4WithRSAEncryption',
'md5',
'md5-sha1',
'md5WithRSAEncryption',
'mdc2',
'mdc2WithRSA',
'ripemd',
'ripemd160',
'ripemd160WithRSA',
'rmd160',
'sha1',
'sha1WithRSAEncryption',
'sha224',
'sha224WithRSAEncryption',
'sha256',
'sha256WithRSAEncryption',
'sha384',
'sha384WithRSAEncryption',
'sha512',
'sha512WithRSAEncryption',
'ssl3-md5',
'ssl3-sha1',
'whirlpool' ]
在节点8中,我被截断了(因为SO不喜欢太多代码):
[ 'DSA',
'DSA-SHA',
'DSA-SHA1',
'DSA-SHA1-old',
'RSA-MD4',
'RSA-MD5',
...
'whirlpool' ]
答案 0 :(得分:1)
在Node.js的GitHub存储库中有一个issue。基本上,事实是,Node.js正在使用的基础OpenSSL中已删除了对DSA的支持。
根据this comment:
DSA-SHA1
已重命名为DSS1
但是:
但是,如果我在节点v10.15.1
crypto.getHashes()
中运行,那么我也不会得到DSS1
。
因此,从我的角度来看,您唯一的选择是切换到另一种签名算法,或者尝试找到独立于Node.js的crypto
模块(因此,独立于OpenSSL。