我正在寻找一种使用node.js验证X509格式的客户端证书的方法,该证书由给我的CA证书进行验证(这些证书都不是由我创建/管理的,我的软件只需要验证发送给它的内容)。
我已经找到了几个可以完成此任务的模块,但是我在使用每个模块时都遇到了问题:
- X509可以使用
x509.verify(cert, CABundlePath, cb)
实现,但需要从FS中读取证书,而我已经将它们存储在内存中。这很繁琐,因为每个到达我的应用程序的Web请求都会执行此操作。 - 看起来PKI.js能够做到这一点,但是他们的示例对我来说不起作用,抱怨缺少文件,所以我甚至无法尝试它。
- 我尝试了node-forge,但我不确定我是否正确地使用它(它们没有任何API文档),它会从
forge.pki.verifyCertificateChain(caStore, [ cer ], cb)
抛出一个forge.pki.BadCertificate
错误。 - 尝试使用pem时,简单的
pem.verifySigningChain(cer, [ ca ], cb)
会抛出一些关于从/var/...
加载文件的错误。即使它可以工作,我也会避免使用这个库,因为它依赖于openssl命令行工具,我想避免使用它。
[编辑] 基本上我需要在Node.js中执行
openssl verify -verbose -CAfile ca-crt.pem client1-crt.pem
,但不要依赖于openssl命令行工具和不要临时将证书保存到磁盘。[编辑2] 是否可以只使用https://nodejs.org/api/crypto.html#crypto_verify_verify_object_signature_signatureformat?