为不同 IP 地址上的资源自动生成 ACME 子域 SSL 证书

Automated ACME subdomain SSL certificate generation for resources on different IP addresses

我一直在研究迁移到使用 Let's Encrypt 的可能性,以维护我们为运营中使用的各种资源准备的 SSL 证书。我们有以下使用 SSL 证书的资源:

如上所述,主要网站 (www) 的 SSL 证书由第三方主机维护,所以我一般不会乱用那个。但是,如您所知,每个端点的 DNS 记录都指向各种不同的 IP 地址。这是我对颁发和部署 SSL 证书的整个过程缺乏经验的地方,这让我有点困惑。

首先,由于我不管理或维护主要网站,我目前正在为每个端点手动生成 CSR,来自提供端点的 server/service - 一个来自 IIS服务器,一个与 RDP 服务器不同,另一个与 WS_FTP 服务器不同,一个与硬件防火墙不同。手动过程虽然不会太耗时,但仍然需要我完成几个步骤,不同的服务器系统需要不同的过程。

我考虑过使用 Let's Encrypt 的免费通配符 SSL 证书之一来覆盖所有这四个端点 (*.example.com),但我不想“干扰”我们的主要网站主机是什么为此。我意识到实际的证书本身是由客户端连接到的服务器提供的,所以它 应该 无关紧要(对吧?),但我可能仍然对个人更满意每个子域端点的 SSL 证书。

因此,我一直致力于使用 Certes ACME 客户端库构建应用程序,以尝试自动处理从 CSR 到部署的整个 SSL 过程。但是,我 运行 遇到了一些问题:

This challenge is not suitable for most people. It is best suited to authors of TLS-terminating reverse proxies that want to perform host-based validation like HTTP-01, but want to do it entirely at the TLS layer in order to separate concerns. Right now that mainly means large hosting providers, but mainstream web servers like Apache and Nginx could someday implement this (and Caddy already does).

Pros:

  • It works if port 80 is unavailable to you.
  • It can be performed purely at the TLS layer.

Cons:

  • It’s not supported by Apache, Nginx, or Certbot, and probably won’t be soon.
  • Like HTTP-01, if you have multiple servers they need to all answer with the same content.
  • This method cannot be used to validate wildcard domains.

因此,根据我目前的研究和我的环境,我最大的三个问题是:

  1. TLS-ALPN-01 验证方法是否是为每个子域生成单独的 SSL 证书的有效(甚至可用)选项?由于防火墙和 FTP 服务器目前无法在端口 80 上提供适当的文件,我看不出有什么方法可以对这些子域使用 HTTP-01 验证。无法使用 API 来自动执行 DNS-01 验证会使该方法通常比它的价值更麻烦。虽然我可能可以对客户端门户进行 HTTP-01 验证 - 也可能是 RDP 服务器(我的研究还没有那么深入) - 我仍然需要手动处理其他两个子域。
  2. 尝试为子域创建通配符证书会更好吗?除了通过减少需要颁发的 SSL 证书数量来“简化”流程之外,与为每个子域使用单独的证书相比,走这条路有什么内在的好处吗?由于主站点是第 3 方 hosted/managed 并且(再次)我目前无法使用 API 来自动执行 DNS-01 验证,我想我需要使用 HTTP-01验证。根据我的理解,这意味着我需要获取 access/permission 来创建响应文件,以及该服务器上的相应目录。
  3. 可以肯定的是,如果我要 generate/deploy 子域的通配符证书,而主网站仍然使用自己的 SSL 证书 www?同样,我 认为 不会是这种情况,但我想尽我所能避免在这种情况下引入更多复杂性 and/or 问题。

我已经在 https://community.certifytheweb.com/t/tls-alpn-01-validation/1444/2 but the answer is to use DNS validation and my suggestion is to use Certify DNS (https://docs.certifytheweb.com/docs/dns/providers/certifydns 上回复了你的相关问题,这是 acme-dns 的替代托管替代云实现(DNS 质询响应的 CNAME 委派。

Certify DNS 与大多数现有的 acme-dns 客户端兼容,因此它可以与 acme-dns 兼容的客户端以及 Certify The Web 一起使用 (https://certifytheweb.com)