如何通过Puppeteer/Chrome DevTools获取重定向链中所有服务器证书
获取重定向链中所有服务器的证书
实现方案
要捕获重定向链中所有中间服务器的证书,不能仅依赖Network.getCertificate事后查询(因为重定向源站的证书可能未被缓存),而是需要在请求过程中通过CDP事件实时监听每个响应的安全信息。
代码示例
const session = await page.target().createCDPSession(); await session.send('Network.enable'); const collectedCertificates = []; // 监听每个请求的响应事件,捕获证书信息 session.on('Network.responseReceived', async (event) => { const { response } = event; if (!response.url.startsWith('https://') || !response.securityDetails) return; const origin = new URL(response.url).origin; // 获取对应源站的完整证书链 const certChain = await session.send('Network.getCertificate', { origin }); if (certChain) { collectedCertificates.push({ requestUrl: response.url, origin, certificateChain: certChain, securityInfo: response.securityDetails }); } }); // 触发导航,包括所有重定向 await page.goto('https://fastlane.ci', { waitUntil: 'networkidle0' }); // 输出所有捕获到的证书 console.log('重定向链证书集合:', collectedCertificates);
关键细节
- 事件监听时机:必须在
page.goto之前注册Network.responseReceived监听器,否则会遗漏中间重定向的请求事件。 - 证书获取逻辑:每个HTTPS响应的
securityDetails字段确认了安全连接的存在,再通过Network.getCertificate提取完整的X.509证书链(包含中间证书和根证书)。 - 源站提取:用
new URL(response.url).origin精准获取请求的源站地址,确保Network.getCertificate参数正确。
内容的提问来源于stack exchange,提问作者Yan Foto
相关产品推荐
相关产品推荐

