gpt4 book ai didi

node.js - NodeJS tls.connect() getPeerCertificate() 返回错误(多)但浏览器显示正常

转载 作者:行者123 更新时间:2023-12-03 12:13:02 32 4
gpt4 key购买 nike

我正在构建一个 SSL 爬虫应用程序,其中用户传入域名,NodeJS 使用 tls用于检索 SSL 证书的库。

首先,这是我的代码:
server.js

const tls = require('tls');
var rootCas = require('ssl-root-cas/latest').create();
const fs = require('fs');

fs.readdirSync('./keys/intermediate_certs').forEach(file => {
rootCas.addFile('./keys/intermediate_certs/' + file)
});

var secureContext = tls.createSecureContext({
ca: rootCas
});

options = {
host: host, //domain like google.com
port: 443,
secureContext: secureContext,
ca: rootCas,
rejectUnauthorized: true
};

var tlsSocket = tls.connect(options, function () {

let rawCert = tlsSocket.getPeerCertificate()
console.log(rawCert)
})

tlsSocket.on('error', (error) => {
console.log(error)
// [ERR_TLS_CERT_ALTNAME_INVALID] Hostname/IP does not match certificate's altnames: Host: zdns.cn. is not in the cert's altnames: DNS:*.fkw.com, DNS:fkw.com

// unable to verify the first certificate or UNABLE_TO_VERIFY_LEAF_SIGNATURE
});

问题是 nodejs 应用程序抛出错误,根据 TLS文档中,错误来自 OpenSSL,但是,在浏览网站和 view certificate 时显示所有有效(即使是公用名也完全匹配)。

以下是一些标准:
  • zdns.cn/www.zdns.cn 显示错误:ERR_TLS_CERT_ALTNAME_INVALID ;从浏览器查看证书时显示 *.zdns.cn
  • knet.cn/www.knet.cn 显示错误:unable to verify the first certificate ;从浏览器查看证书时显示 www.knet.cn

  • 注意:我包含了来自 ssl-root-cas 的最新根 CA并下载了 intermediate certificate手动从 CA 站点。

    最佳答案

    您之所以收到该错误,是因为您的 rejectUnauthorized范围。证书呈现*.fkw.com作为CN,它呈现*.fkw.comfkw.com作为备用名称。这些都不匹配zdns.cnwww.zdns.cn .

    如果您只是爬行获取证书,您可能需要删除 rejectUnauthorized .或者,错误似乎确实在错误中显示了证书信息的其余部分。因此,您可以保持原样,并在输出信息中包含有关证书不受信任/无效的原因的信息。对于抓取证书的爬虫来说,这似乎是有值(value)的信息。

    关于node.js - NodeJS tls.connect() getPeerCertificate() 返回错误(多)但浏览器显示正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61664153/

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