我需要什么样的证书才能签署我自己的子域证书?

信息安全 tls 证书 证书颁发机构
2021-08-30 13:08:07

我们正在制作一个基于 Web 的应用程序,它将作为虚拟机映像安装在 Intranet 中(我们向用户发送带有虚拟机映像的 CD,用户在 VMWare/VirtualBox/...中运行它)。

我们希望通过使用 HTTPS 来保护应用程序前端。我们考虑为域获取一个证书(由某个已知 CA 颁发)app.ourdomain.com并将其安装在所有实例上,但这显然意味着可以拆开安装,取出私钥并让中间人攻击某些其他安装(前提是他可以访问其网络)。虽然这种情况不太可能发生,但我们仍然希望避免冒险。

是否有可能获得允许我们签署自己的子域的通配符证书,以便我们可以颁发证书app1.ourdomain.com, app2.ourdomain.com,... 并且它们会被用户浏览器接受?(我们无法控制用户的浏览器)如果是,这些证书是如何调用的?

如果没有,是否有其他方法可以保护用户彼此免受伤害?

更新:我在 serverfault 上发现了一个类似的问题,所以它在技术上似乎是可行的,但是“你几乎找不到任何 CA 愿意为你提供这样的证书”。我仍然想知道是否有颁发此类证书的 CA?

3个回答

通配符证书,即名称中带有“ *”的证书不适合您。通配符证书是客户端将接受为“匹配”多个服务器名称的证书:包含“ *.example.com的证书将适用于“ foo.example.com”、“ bar.example.com”等。这正是您不想要的:您不希望产品的一个实例中包含的私钥和证书对另一个具有不同名称的实例有用。

要实现您想要做的事情,您需要获得一个CA 证书,标记为带有Basic Constraints扩展名并将cA标志设置为TRUE. 这将允许您自己颁发证书,并且证书仍将链接到您从中获得自己的 CA 证书的根 CA。

现有的、已部署的 CA 可以向您出售这样的证书,但价格会很昂贵:

  • 现有的 CA 有一种商业模式,概括起来就是“大量出售单个证书”。如果您在没有 CA 的帮助的情况下制作了许多证书,那么它就会失去业务......并且会想要拿回它的钱。

  • 现有的 CA 有一个巨大的资产,那就是它的根公钥包含在全世界的 Web 浏览器和操作系统中。操作系统/浏览器供应商只有在 CA 提供强有力的保证以证明它是认真的并且只会向正式确定的实体颁发证书时才接受这样做。当这样的 CA 将这种发行权委托给子 CA 时,它往往需要同等程度的严肃性。因此,您将需要一些相当强大的硬件(掩体中的HSM)和繁重的程序。

前世,我和GlobalSign做过这样的交易。大约是 10 年前,我不知道他们是否仍然提供此类交易。

另一种策略是让你的客户处理这个问题。记录如何在应用程序中推送证书和密钥,您就完成了。一些客户将使用他们自己的 CA(您无法控制用户的浏览器,但客户可能拥有这样的控制权)。有些人会在别处购买证书。

无论如何,您需要允许这样的手动证书配置,如果只是在证书到期时允许续订。

我不相信有任何方法可以做到这一点,除非您想向 CA 支付大量费用以让他们发布可以签署任何域的证书。我的建议是为他们每个人购买一个标准的 SSL,它们的成本约为 10 美元。 您可以在 Namecheap 以大约 8.00 美元的价格买到一台还有globessl,多花几美分。

在过去的 8 年中,情况发生了很大变化,当然现在可以使用免费的域验证证书。

最著名的是 Let's Encrypt,您可以使用他们的 CertBot 验证域上的 http 请求,它会为您颁发 3 个月的域验证证书。足以获得挂锁但不是绿条,这对大多数人都有效。只要它通过 DNS 在 Internet 上公开可用,您就可以执行此操作。

如果您想将其集成到您自己的应用程序中而不是使用他们的“CertBot”,他们还有一个您可以使用的 API,我这样做是为了从我的 CPanel 托管环境中轻松获取 DNS 验证的通配符证书。

如果您需要绿条(EV 证书),那么我不确定您能做什么,之前获得 CA 证书的建议可能有效,但我不是 100%。