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

能否用Protractor测试SSL证书有效性?实现到期前1个月自动检测?

使用Protractor测试SSL证书有效性并实现自动化告警

首先直接给你答案:Protractor本身没有直接的SSL证书测试功能,但结合Node.js的能力完全可以实现你要的需求——不仅能验证SSL证书的有效性,还能在证书有效期不足1个月时让测试自动失败。

为什么能实现?

Protractor本质是运行在Node.js环境里的端到端测试框架,而Node.js自带了tls模块(用于处理SSL/TLS连接),我们可以用它来获取目标网站的SSL证书信息,再结合Protractor常用的测试断言库(比如Jasmine)来编写验证逻辑。

具体实现步骤

下面是一个完整的示例,用Jasmine作为测试断言工具:

1. 编写获取SSL证书信息的辅助函数

这个函数会建立一个TLS连接,拿到证书的有效期并计算剩余天数:

const tls = require('tls');
const { browser } = require('protractor');

// 获取指定域名的SSL证书剩余有效期(天数)
function getSSLCertRemainingDays(hostname, port = 443) {
  return new Promise((resolve, reject) => {
    const socket = tls.connect({
      host: hostname,
      port: port,
      rejectUnauthorized: false // 即使证书无效也允许连接,这样才能获取到证书详情
    }, () => {
      const cert = socket.getPeerCertificate();
      socket.end();
      
      const expiryDate = new Date(cert.valid_to);
      const currentDate = new Date();
      // 计算剩余天数(向上取整,避免小数误差)
      const remainingDays = Math.ceil((expiryDate - currentDate) / (1000 * 60 * 60 * 24));
      
      resolve({
        expiryDate: expiryDate,
        remainingDays: remainingDays
      });
    });

    socket.on('error', (err) => {
      reject(new Error(`Failed to fetch SSL cert: ${err.message}`));
    });
  });
}

2. 编写Protractor测试用例

在测试套件中调用上面的函数,添加断言逻辑:

describe('SSL Certificate Validation', () => {
  it('should fail if SSL certificate expires within 30 days', async () => {
    // 从当前测试页面的URL中提取域名(也可以直接写死,比如'your-app-domain.com')
    const targetDomain = await browser.getCurrentUrl().then(url => new URL(url).hostname);
    const certDetails = await getSSLCertRemainingDays(targetDomain);

    // 打印日志方便排查
    console.log(`SSL证书过期时间: ${certDetails.expiryDate.toLocaleDateString()}`);
    console.log(`剩余有效期天数: ${certDetails.remainingDays}`);

    // 核心断言:剩余天数必须大于30,否则测试失败并给出提示
    expect(certDetails.remainingDays).toBeGreaterThan(30, 
      `⚠️ SSL证书即将过期!剩余有效期仅${certDetails.remainingDays}天,不足30天!`);
  });
});

一些注意事项

  • rejectUnauthorized: false的作用:这个配置很关键——如果证书已经过期或者不被系统信任,默认的TLS连接会失败,加上这个参数我们才能强制建立连接,获取到证书的实际信息。
  • 多环境适配:如果你的测试需要覆盖不同环境(开发/测试/生产),可以把域名配置到Protractor的conf.js文件中,通过参数切换,不用硬编码在测试用例里。
  • 独立测试套件:你可以把这个SSL检查作为单独的测试套件运行,也可以把它加到现有端到端测试的前置步骤中,确保在执行UI测试前先验证证书有效性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:49:32