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

如何使用Greenlock(Let’s Encrypt)为npm smtp-server提供安全保障?

解决Greenlock端口占用与SMTP证书问题

核心思路:切换到DNS-01挑战模式

Greenlock本身没限制端口,是Let's Encrypt的ACME协议要求HTTP-01挑战必须用80端口、TLS-ALPN-01必须用443端口——这是免费证书签发的验证规则,没法绕开这两个端口的限制,除非换用DNS-01挑战。这种方式不需要占用80/443,而是通过验证你对域名DNS记录的控制权来签发证书,完全适配你的场景。

具体操作步骤

  • 配置DNS-01挑战插件
    你需要根据自己的DNS服务商选择对应的Greenlock DNS插件(比如Cloudflare、AWS Route53、阿里云DNS等都有现成插件),以Cloudflare为例,配置代码大致如下:

    const greenlock = require('@greenlock/client').create({
      packageRoot: __dirname,
      configDir: './greenlock.d',
      maintainerEmail: 'your-email@example.com',
      challenges: {
        'dns-01': {
          module: '@greenlock/challenge-dns',
          package: '@greenlock/challenge-dns-cloudflare',
          cloudflare: {
            apiToken: '你的Cloudflare API令牌'
          }
        }
      },
      approveDomains: async (opts) => {
        opts.subject = 'your-domain.com'; // 你的SMTP域名
        opts.domains = ['your-domain.com', 'mail.your-domain.com']; // 包含SMTP子域名
        return Promise.resolve(opts);
      }
    });
    

    如果你的DNS服务商没有现成插件,也可以自定义脚本实现DNS记录的临时添加/删除逻辑,对接Greenlock的dns-01接口。

  • 将生成的证书配置到SMTP服务器
    Greenlock会把签发的证书存在configDir指定的目录下,找到对应域名的fullchain.pem(证书链)和privkey.pem(私钥),配置到你的SMTP服务器中。比如Postfix可以在main.cf里添加:

    smtpd_tls_cert_file = /path/to/greenlock.d/your-domain.com/fullchain.pem
    smtpd_tls_key_file = /path/to/greenlock.d/your-domain.com/privkey.pem
    
  • 确认自动续期正常工作
    DNS-01挑战的续期过程同样不需要占用80/443,只要你的DNS插件能正常访问服务商API,Greenlock会自动完成证书续期,无需手动干预。

额外说明

别再找修改Greenlock端口的设置了——ACME协议的验证规则卡死了80/443的要求,改端口根本没法通过验证拿证书。DNS-01是目前唯一不依赖这两个端口的免费证书获取方式,完全适配你80/443被占用、不想买付费证书的场景。

内容的提问来源于stack exchange,提问作者Vineeth Rai k

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 03:05:07