构建 SSL 证书监视器(检查有效日期)

构建 SSL 证书监视器:一个真实的 Node.js 项目

各位开发者们好!👋 今天我想分享一个实践项目,它在解决实际问题(监控 SSL 证书到期日期)的同时,让我学到了 Node.js 中的几个重要概念。

问题

如果您在服务器上使用 HTTPS 运行多个网站(您应该这样做!),则需要跟踪 SSL 证书的到期时间。虽然 Let's Encrypt 证书通过 certbot 自动续订,但拥有监控脚本可以让您高枕无忧,并有助于尽早发现任何续订问题。

关键学习点

  • 使用 Node 的本机加密模块 最酷的发现之一是 Node.js 的内置 X509Certificate 类。无需外部库!以下是读取证书的方法:
  • const { X509Certificate } = require('crypto');
    const fs = require('fs');
    
    const certFile = fs.readFileSync('/path/to/cert/fullchain.pem');
    const x509 = new X509Certificate(certFile);
    const expiryDate = new Date(x509.validTo);
  • 环境变量最佳实践 切勿对敏感数据进行硬编码!我学会了使用 .env 来构造项目以进行配置:
  • // Don't do this ❌
    const certPath = '/etc/letsencrypt/live/mysite.com/fullchain.pem';
    // Do this instead ✅
    require('dotenv').config();
    const certPath = process.env.CERT_PATH;

    请记住在你的 repo 中包含一个 .env.example 来帮助其他开发人员:

    DOMAIN_1=example.com
    DOMAIN_1_CERT_PATH=/path/to/cert/fullchain.pem
  • 使输出对用户友好 在构建实用程序脚本时,清晰的输出至关重要。我使用控制台颜色突出显示重要警告:
  • if (daysUntilExpiry <= 7) {
        console.log('\x1b[31m%s\x1b[0m', 'CRITICAL: Certificate expires soon!');
    }

    项目结构提示

    我希望早点知道以下这些事——组织小型公用事业项目:

    ssl-checker/
      ├── checkCertificateExpiry.js  # Main script
      ├── .env                       # Private configuration
      ├── .env.example              # Public example
      ├── .gitignore                # Exclude sensitive files
      └── package.json              # Dependencies and scripts

    实际应用

    该脚本在我的服务器上运行,监控两个域。

    当证书需要更新时,非常简单:

    sudo certbot certonly --nginx -d domain.com

    关键要点🔑

    安全第一:始终使用环境变量来存储敏感数据

    错误处理:你的脚本应该能够妥善处理丢失的文件或无效的证书

    用户体验:清晰、彩色的控制台输出使实用程序脚本更加专业

    模块化:结构化代码,以便以后轻松添加更多域

    下一步是什么?

    您可以通过以下方式增强此项目:

    添加证书到期的电子邮件通知

    创建一个简单的 Web 仪表板

    添加对非 Let's Encrypt 证书的支持

    实现自动 Slack/Discord 通知

    结论

    构建这样的实用脚本是学习真实编程的好方法。你可以练习:

    文件系统操作

    密码学基础知识

    环境配置

    错误处理

    用户友好的输出

    您是否编写过类似的实用脚本?您会添加哪些功能?请在评论中告诉我!

    完整代码源

    buymeacoffee.com/techmobilebox/e/335174

    记得关注我以获取更多实用的编码教程!🚀

    nodejs #webdev #安全 #编程 #devops