Javascript 从https证书读取关键扩展
我想为节点https证书验证执行自定义验证。因此,在https选项中,我将Javascript 从https证书读取关键扩展,javascript,node.js,ssl,https,x509,Javascript,Node.js,Ssl,Https,X509,我想为节点https证书验证执行自定义验证。因此,在https选项中,我将rejectUnauthorized属性设置为false var httpsOptions = { ... rejectUnauthorized: false, ... }; 现在,即使证书验证在内部失败,请求也不会失败。我想手动处理那部分。我想处理未处理的关键扩展错误。我的代码是 var req = https.request(httpsOptions, (res) => { va
rejectUnauthorized
属性设置为false
var httpsOptions = {
...
rejectUnauthorized: false,
...
};
现在,即使证书验证在内部失败,请求也不会失败。我想手动处理那部分。我想处理未处理的关键扩展
错误。我的代码是
var req = https.request(httpsOptions, (res) => {
var data = '';
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
console.log(data);
});
});
req.on("socket", function () {
req.socket.on('secureConnect', () => {
if(!req.socket.authorized){
if(req.socket.authorizationError === 'unhandled critical extension'){
// Place to verify extensions
}
process.nextTick(() => {req.abort();});
}
});
});
req.write(JSON.stringify(requestObj));
req.end();
上述代码按预期工作。我可以说当未处理的关键扩展发生错误时。在if
条件(验证扩展的位置)中,我想看看哪些是未处理的关键扩展。如果它与我的列表不匹配,我想中止请求req.socket
有太多属性,所以我无法粘贴到这里。其中没有保存那些未处理的
关键扩展的字段。如何提取导致错误的未处理的关键扩展
注意:我看到了一些npm
包,它们可以解析ssl证书,比如x509
和PKIjs
。这给了我很多困惑,我找不到任何能解决我问题的工作实例
编辑:
req.socket.getPeerCertificate().raw
以Buffer
格式提供DER证书。如何解码并查看这些扩展?首先,我们需要获得服务器证书。我们可以使用req.socket.getPeerCertificate()
来获取它。它返回一个JSON对象,但没有扩展部分。但是,它将在其raw
属性中使用buffer
格式的整个证书
var certInBuf = req.socket.getPeerCertificate().raw;
有很多包可用于将此缓冲区格式转换为pem格式。其中之一是
然后,我们可以使用解析证书并提取扩展
var pki = require('node-forge').pki;
var extensions = pki.certificateFromPem(certInPem).extensions;
然后我们可以验证扩展。如果不满意,我们可以通过调用req.abort()
中止请求。首先,我们需要获取服务器证书。我们可以使用req.socket.getPeerCertificate()
来获取它。它返回一个JSON对象,但没有扩展部分。但是,它将在其raw
属性中使用buffer
格式的整个证书
var certInBuf = req.socket.getPeerCertificate().raw;
有很多包可用于将此缓冲区格式转换为pem格式。其中之一是
然后,我们可以使用解析证书并提取扩展
var pki = require('node-forge').pki;
var extensions = pki.certificateFromPem(certInPem).extensions;
然后我们可以验证扩展。如果不满意,我们可以通过调用req.abort()