我想使用 chrome puppeteer 访问 url 的证书详细信息。是否可以使用当前的 puppeteer API 来做到这一点?
问问题
2948 次
4 回答
3
正如 Grant Miller 所说,您可以使用 Chrome DevTools 协议Network.getCertificate
方法访问完整的 DER 编码证书,而不仅仅是 puppeteer 响应提供的 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
*/
}
}
然后,您可以使用任何节点包来解析编码证书链中的每个证书。
于 2018-09-26T08:16:49.397 回答
1
您可以使用 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]);
}
于 2018-07-23T06:32:24.603 回答
1
如果需要以下方法可以response.securityDetails()
直接使用:page.goto
- 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
于 2020-12-12T15:23:25.193 回答
0
使用以下代码获取证书列表。结果无法直接读取。将每个条目存储在具有 pem 扩展名的文件-----BEGIN CERTIFICATE-----
中,行首-----END CERTIFICATE-----
位于行尾。
链接 - https://gist.github.com/be9/23101bcd95c289dcb7b0c3ae0eb49525
const puppeteer = require('puppeteer');
process.on('unhandledRejection', (reason, p) => {
console.error('Unhandled Rejection at: Promise ', p, ' reason: ', reason);
process.exit(3);
});
(async () => {
let browser;
let exitCode = 0;
try {
browser = await puppeteer.launch({
headless: false,
devtools: true
});
const page = await browser.newPage();
const client = await page.target().createCDPSession();
await client.send('Network.enable');
page.on('response', async (res) => {
if (res.securityDetails() != null) {
console.info(await page._client.send('Network.getCertificate', {
origin: res.url()
}));
}
});
await page.goto('https://www.chase.com/', {
waitUntil: 'networkidle2',
timeout: 3000000
});
} catch (e) {
console.error('Got exception', e);
exitCode = 1;
} finally {
if (browser != null) {
await browser.close();
}
process.exit(exitCode);
}
})();
于 2021-10-05T07:03:15.373 回答