在Node.JS crypto中使用公钥验证签名
是否有一种好方法可以使用公钥验证Node.JS(v0.4+)中的签名 当前的加密模块允许使用证书,但不允许使用公钥。例如:在Node.JS crypto中使用公钥验证签名,node.js,openssl,cryptography,node-crypto,Node.js,Openssl,Cryptography,Node Crypto,是否有一种好方法可以使用公钥验证Node.JS(v0.4+)中的签名 当前的加密模块允许使用证书,但不允许使用公钥。例如: var crypto = require("crypto"); verifier = crypto.createVerifier("sha1"); verifier.update("signed data"); verifier.verify(CERT, signature); 变量CERT需要签名证书(我猜公钥是从中提取的),但我所拥有的只是公钥,而不是证书 实现这一
var crypto = require("crypto");
verifier = crypto.createVerifier("sha1");
verifier.update("signed data");
verifier.verify(CERT, signature);
变量CERT
需要签名证书(我猜公钥是从中提取的),但我所拥有的只是公钥,而不是证书
实现这一点的唯一可靠方法似乎是将数据、公钥和签名的内容转储到文件中并执行openssldgst
fs.writeFileSync("public.key", pubkey);
fs.writeFileSync("sig.sha1", signature);
fs.writeFileSync("data.txt", data);
exec("openssl dgst -sha1 -verify public.key -signature sig.sha1 data.txt", ...)
但每次我需要验证签名时创建(和删除)文件似乎完全是浪费
有什么好办法可以做得更好吗
更新2011-08-03
Node.js v0.5中的加密模块允许验证(RSA或X.509)为什么不将公钥放入自签名证书中?然后节点的加密模块就可以正常工作了
我认为这样做比派生一个openssl子进程要有效得多。好吧,我非常肯定openssl是一条可行的道路。它是否允许您在应用程序中流式传输值,或者该应用程序是否必须使用文件?你打算多久做一次?有规律,但不经常。我可以接受这个解决方案,但它感觉非常错误,尤其是与更优雅的加密验证器相比。我不希望使用文件。我希望将公钥作为第一个参数传递,但我不确定它是否应该是b64编码的字符串、用“----开始键----”和“----结束键----”包装的字符串或新缓冲区(U字符串,'base64')。我尝试了所有,但crypto仍在寻找证书。如何告诉它我正在直接传递公钥?我使用--BEGIN public key----和--END public key----当我看到openssl从私钥PEM中提取公钥时,错误消息消失了。我尝试使用节点0.8中的加密模块来做这件事。。。结果失败了。您似乎取得了更大的成功,可以发布一些代码吗?是否可以使用公钥生成证书?所有示例都使用私钥而不是公钥。所有示例都涉及一对2个密钥,1个私钥,1个公钥。创建CSR时,CSR包含一个证书,证书包含一个公钥。这里有一个更清楚的文档,“genrsa”实际上生成了一对连接的密钥,1个公共密钥,1个私有密钥。第一段:“使用OpenSSL,私钥也包含公钥信息,因此不需要单独生成公钥。”