12

我目前正在开展一个项目,在该项目中我创建了一个 CA 证书和几个子证书到该 CA 证书。这些证书将用于保护 SAMLV2 设置中的服务器间通信,因此我将拥有一个用于身份提供者的证书和一个用于服务提供者的证书。用户/浏览器不会验证证书,因此只有服务器需要信任我的自定义 CA。我的证书树看起来像这样:

  • CustomRootCACert
    • CustomIdentityProviderCert
    • CustomServiceProviderCert

现在,我听到很多人说在生产中使用自制证书不好。但是当我问为什么时,人们通常只是在安全方面喃喃自语,但从不深入细节。是否有任何技术原因不在生产中使用我自己的证书?我想不出……当然,我意识到如果我失去对根证书的控制权,任何人都可以开始创建各种证书。但在这种情况下,他们还必须在我的服务器上安装证书并配置 saml 应用程序以使用它们。只有这样他们才能开始生成虚假的 saml 请求和对我的应用程序的响应。

如果这是唯一的问题,那么这个解决方案(在生产中使用自制证书)仍然会比我们今天的登录设置更好。

4

4 回答 4

22

问问自己证书证明了什么。

如果您获得由信誉良好的 CA 颁发的证书,则证明证书持有者已向该 CA 验证了他们的身份,符合他们的证明标准。

如果您获得了由 ad-hoc CA 颁发的证书,则证明有人知道如何制作证书。

如果您控制对话的两端,我认为拥有自己的私有 CA 就可以了。您会信任自己的 CA。您可能确实可以使这非常安全(通过将 CA 私钥保存在离线的安全位置,并进行签名运动网络练习)。

如果您需要说服其他人信任您的 CA,则困难在于。他们为什么要这样做?您需要说服他们这样做是安全的,并且他们将承担将您的 CA 证书添加到他们的客户端的管理开销。

于 2009-02-09T11:31:13.860 回答
7

由于您仅使用证书来保护网络流量而不是对用户/计算机进行身份验证,因此听起来您可以合法地使用 MakeCert.exe。

我觉得有一点值得一提。在您花费一些时间使用 MakeCert.exe 界面后,您可能会考虑使用独立的根证书服务器。

考虑以下几点:

  • (几乎)所有版本的 Windows Server 都包含免费的证书服务器服务
  • Windows Stand-Alone CA Server 的安装和配置非常简单
  • Windows Stand-Alone CA Server 可以安装在虚拟机上,并在您需要颁发附加证书时打开/关闭
  • 可以使用非常少的内存(例如 256mb)运行基于 VM 的 Windows Stand-Alone CA Server
  • Windows Stand-Alone CA Server 包含一个漂亮而干净的基于 Web 的注册界面,以简化请求证书的过程。
  • 可以使用或不使用 CRL 检查,具体取决于您的需要。

过去,我首先从 selfssl.exe 开始,最终转到 MakeCert.exe 以生成根证书,然后颁发我的客户端证书。但是在与语法作斗争并且总是不得不记住我将根证书放在哪里之后,我切换到在虚拟机中使用独立根 CA。

于 2009-02-19T08:00:14.323 回答
5

如果证书仅在您自己的服务器之间在内部传递(并且不被客户端使用,一种或另一种方式) - 那么使用您自己的内部 CA 是完全可以接受的。
但是,一个建议 - 不要让您的根 CA 颁发您的提供商证书。相反,使用您的根 CA 创建一个中间 CA - 然后使用它来颁发提供者证书。当您必须开始管理证书过期、扩展系统/基础设施、吊销列表等时,这将有助于您的长期发展。

于 2009-02-09T11:36:29.323 回答
3

在私人使用中使用自签名证书没有真正的问题,即当您控制所有需要信任自制根证书的系统时使用。

您手动将根证书安装到需要信任它的每个系统上。

您可以在生产中执行此操作,也可以在浏览器使用中执行此操作 - 例如,在可以通过软件分发方法推出根 ca 的组织内 - 没有理由去支付 Microsoft 碰巧信任的证书颁发机构的费用。

[编辑]就安全性而言,问题在于包含根证书的私钥,只要您可以确保保持私有,那么您就可以验证该根证书的任何证书。

于 2009-02-09T11:31:41.660 回答