fix: 修复站点监控某些情况下获取不到证书的bug

This commit is contained in:
xiaojunnuo
2026-04-19 12:23:41 +08:00
parent cc73f156a7
commit a2bbc7e272
@@ -89,24 +89,38 @@ export class SiteTester {
// 创建 HTTPS 请求 // 创建 HTTPS 请求
const requestPromise = safePromise((resolve, reject) => { const requestPromise = safePromise((resolve, reject) => {
const req = https.request(options, res => { const req = https.request(options, res => {
// 获取证书 // // 获取证书
// @ts-ignore // // @ts-ignore
const certificate = res.socket.getPeerCertificate(); // const certificate = res.socket.getPeerCertificate();
// logger.info('证书信息', certificate); // // logger.info('证书信息', certificate);
if (certificate.subject == null) { // if (certificate.subject == null) {
logger.warn("证书信息为空"); // logger.warn("证书信息为空");
resolve({ // resolve({
certificate: null // certificate: null
}); // });
} // }
resolve({ // resolve({
certificate // certificate
}); // });
res.socket.end(); res.socket.end();
// 关闭响应 // 关闭响应
res.destroy(); res.destroy();
}); });
// ✅ 关键:在 'socket' 事件中获取证书(握手完成后立即执行)
req.on('socket', (socket:any) => {
socket.on('secureConnect', () => {
// TLS握手完成,证书已经可用
const certificate = socket.getPeerCertificate();
if (certificate.subject) {
logger.info('证书获取成功', certificate.subject);
resolve({
certificate
});
}
});
});
req.on("error", e => { req.on("error", e => {
reject(e); reject(e);
}); });