use*_*955 10 verification ssl certificate ca node.js
我正在寻找一种使用提供给我的CA证书来验证X509格式的客户端证书的node.js方法(这些证书都不是由我创建/管理的,我的软件只需要验证发送给它的蜜蜂) 。
我已经找到了完成这项工作的几个模块,但是每个模块都有问题:
x509.verify(cert, CABundlePath, cb),但是它需要从FS读取证书,而且我已经将它们存储在内存中了。这很麻烦,因为到达我应用程序的每个Web请求都将完成此操作。forge.pki.BadCertificate从抛出了一个错误forge.pki.verifyCertificateChain(caStore, [ cer ], cb)。pem.verifySigningChain(cer, [ ca ], cb)会抱怨在从中加载文件时会出错/var/...。即使可行,我也会避免使用此lib作为依赖openssl命令行工具的方式,我想避免现在,我感到非常愚蠢,因为我无法通过上述任何模块来完成此简单任务。有人可以给我指出一个简单的解决方案,该解决方案可以让我使用给定的CA证书来验证X509证书的签名/有效性吗?:s
[编辑]基本上,我需要openssl verify -verbose -CAfile ca-crt.pem client1-crt.pem的Node.js,但不依赖于OpenSSL的命令行工具,并没有该证书暂时保存到磁盘。
[edit2]是否可以仅使用https://nodejs.org/api/crypto.html#crypto_verify_verify_object_signature_signatureformat?
我终于设法使用做到了node-forge。这是一个工作代码示例:
let pki = require('node-forge').pki;
let fs = require('fs');
let caCert;
let caStore;
try {
caCert = fs.readFileSync('path/to/ca-cert.pem').toString();
caStore = pki.createCaStore([ caCert ]);
} catch (e) {
log.error('Failed to load CA certificate (' + e + ')');
return....;
}
try {
pki.verifyCertificateChain(caStore, [ cert ]);
} catch (e) {
return handleResponse(new Error('Failed to verify certificate (' + e.message || e + ')'));
}
Run Code Online (Sandbox Code Playgroud)
两种证书均应以base64编码的PEM格式/ js字符串给出。
verifyCertificateChain检查证书的有效性(notBefore/ notAfter)并验证给定的CA链。
我不是100%肯定这是最好的方法,还是该库是否做得很好,因为它们的源代码中verifyCertificateChain充满了#TODOs,所以也许还没有准备好投入生产?但至少我有一个可行的解决方案。创建一个包装libsslc调用的节点模块可能会更好,但是对于这个小任务来说,这只是很多工作。
| 归档时间: |
|
| 查看次数: |
5370 次 |
| 最近记录: |