You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chrome浏览器网页浏览时自动下载证书的实现方法咨询

自动下载网页证书的实现方案(Chrome环境)

核心结论

Chrome官方扩展API确实没有直接开放证书查询接口,但可以通过Debugger API间接实现浏览网页时自动下载证书的功能。

可行方案:使用Chrome Debugger API

1. 扩展权限配置(manifest.json)

需要在扩展清单中申请debugger和tabs权限,确保能访问页面调试能力:

{
  "manifest_version": 3,
  "name": "证书自动下载工具",
  "version": "1.0",
  "permissions": ["debugger", "tabs"],
  "background": {
    "service_worker": "background.js"
  }
}

2. 核心逻辑实现(background.js)

通过监听页面加载完成事件,附加调试器获取证书数据,转换为标准PEM格式后触发自动下载:

// 监听HTTPS页面加载完成事件
chrome.tabs.onCompleted.addListener(async (tab) => {
  if (!tab.url.startsWith('https://')) return;

  try {
    // 附加调试器到目标标签页
    await chrome.debugger.attach({ tabId: tab.id }, '1.3');
    // 启用Security调试域
    await chrome.debugger.sendCommand({ tabId: tab.id }, 'Security.enable');
    // 获取当前页面的证书数据
    const certResult = await chrome.debugger.sendCommand(
      { tabId: tab.id },
      'Security.getCertificate',
      { origin: new URL(tab.url).origin }
    );

    // 将DER格式证书转换为PEM格式
    const derCert = new Uint8Array(certResult.certificate);
    const pemCert = `-----BEGIN CERTIFICATE-----\n${btoa(String.fromCharCode(...derCert))}\n-----END CERTIFICATE-----`;

    // 创建Blob并触发下载
    const blob = new Blob([pemCert], { type: 'application/x-x509-ca-cert' });
    const downloadUrl = URL.createObjectURL(blob);
    chrome.downloads.download({
      url: downloadUrl,
      filename: `${new URL(tab.url).hostname}_cert.pem`,
      saveAs: false
    });

    // 断开调试器连接
    await chrome.debugger.detach({ tabId: tab.id });
  } catch (err) {
    console.error('证书下载失败:', err);
    // 确保调试器被强制断开
    chrome.debugger.detach({ tabId: tab.id }).catch(() => {});
  }
});

3. 关键注意事项

  • 用户授权要求:首次运行扩展时,Chrome会弹出调试权限授权提示,无法静默获取权限;
  • 商店审核限制:使用debugger权限的扩展提交Chrome商店时,需详细说明功能用途,可能会触发额外审核流程;
  • 页面范围限制:仅能处理主页面的证书,若需获取iframe内的证书,需额外遍历iframe并单独调试。

替代方案:全局命令行配置

如果不需要针对单个浏览页面触发自动下载,可通过Chrome命令行参数配合外部工具实现批量导出:

  • 启动Chrome时添加--ssl-key-log-file=./ssl-log.txt,记录SSL会话密钥,再通过Wireshark等抓包工具导出证书;
  • 使用openssl s_client -connect example.com:443命令批量抓取指定域名证书,但无法与浏览行为联动。

内容的提问来源于stack exchange,提问作者Zhu Junjie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 16:48:17