gpt4 book ai didi

javascript - 从 https 证书中读取关键扩展

转载 作者:太空宇宙 更新时间:2023-11-03 14:43:22 29 4
gpt4 key购买 nike

我想为 Node https 证书验证做自定义验证。因此,在 https 选项中,我将 rejectUnauthorized 属性设置为 false

var httpsOptions = {
...
rejectUnauthorized: false,
...
};

现在即使内部证书验证失败,请求也不会失败。我想手动处理那部分。我想处理 unhandled critical extension 错误。我这样做的代码是,

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();

以上代码按预期工作。当 unhandled critical extension 错误发生时,我可以说。在 if 条件(Place to verify extensions)中,我想查看所有未处理的 critical extensions 是什么。如果它与我的列表不匹配,我想中止请求。 req.socket 的属性太多了,这里就不贴了。其中没有字段用于保存那些未处理的 关键扩展。如何提取导致错误的未处理的关键扩展?

注意:我看到一些npm 包可以解析ssl 证书,如x509PKIjs。它带来了很多困惑,我找不到任何可以解决我的问题的工作示例。

编辑:

req.socket.getPeerCertificate().rawBuffer 格式给出 DER 证书。如何对其进行解码并查看这些扩展?

最佳答案

首先我们需要获取服务器证书。我们可以使用req.socket.getPeerCertificate() 来获取。它返回一个 JSON 对象,但没有扩展部分。但是,它将在其 raw 属性中包含 buffer 格式的整个证书。

var certInBuf = req.socket.getPeerCertificate().raw;

有很多包可用于将这种缓冲区格式转换为 pem 格式。其中之一是 pemtools

var certInPem = pemtools(certInBuf, 'CERTIFICATE').toString();

然后我们可以使用node-forge解析证书并提取扩展名。

var pki = require('node-forge').pki;
var extensions = pki.certificateFromPem(certInPem).extensions;

然后我们可以验证扩展。如果不满意,我们可以通过调用 req.abort()

中止请求

关于javascript - 从 https 证书中读取关键扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41344659/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com