如何使用chrome puppeteer访问ssl证书内容

时间:2017-09-08 04:40:05

标签: node.js google-chrome-devtools chromium puppeteer

我想使用chrome puppeteer访问网址的证书详细信息。是否可以使用当前的puppeteer API来完成它?

3 个答案:

答案 0 :(得分:0)

您可以使用Chrome DevTools协议Network.getCertificate方法访问DER编码的证书:

const certificate = await page._client.send('Network.getCertificate', {
  origin: 'https://example.com/',
});

for (let i = 0; i < certificate.tableNames.length; i++) {
  console.log(certificate.tableNames[i]);
}

答案 1 :(得分:0)

就像Grant Miller所说的那样,您可以使用Chrome DevTools协议Network.getCertificate方法访问完整的DER编码证书,而不仅仅是伪造者响应建议的securityDetails。

page.on('response', async (res) => {
  if (res.securityDetails() != null) {
    console.info(await page._client.send('Network.getCertificate', {origin: res.url()}));
    /*
      { tableNames: [ 'MIIDwTCCAqmgAwIBAgIJALzkRqUOhsraM...' ] }
      Network.getCertificate - Returns the DER-encoded certificate
    */
  }
}

然后,您可以使用任何节点包来解析编码证书链中的每个证书。

答案 2 :(得分:0)

如果需要以下方法,可以直接在page.goto上使用response.securityDetails()

  • securityDetails.issuer()
  • securityDetails.protocol()
  • securityDetails.subjectAlternativeNames()
  • securityDetails.subjectName()
  • securityDetails.validFrom()
  • securityDetails.validTo()

例如validTo()

const response = await page.goto(url)
const securityDetails = response.securityDetails()
const expiryDate = securityDetails.validTo() * 1000
console.log(new Date(expiryDate))

输出:

Sunday, December 20, 2020