2009-02-09 115 views
10

我目前正在一个项目中创建一个CA证书和一些CA证书的子证书。这些证书将用于保护SAMLV2设置中的服务器间通信,因此我将拥有身份提供者证书和服务提供者证书。用户/浏览器不会验证证书,因此它只是需要信任我的自定义CA的服务器。我的证书树看起来是这样的:为什么在生产中使用MakeCert工具生成的证书不好?

  • CustomRootCACert
    • CustomIdentityProviderCert
    • CustomServiceProviderCert

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

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

回答

18

问问你自己证明了什么。

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

如果您获得由临时CA颁发的证书,那么它证明有人知道如何制作证书。

如果您控制对话的两端,我认为可以有自己的专用CA用于此目的。您可能确实可以做到这一点非常安全(通过将CA私钥保存在离线安全的地方,并签署一个sneakernet练习)。

3

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

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

您可以在生产环境中使用此功能以及浏览器使用 - 例如在根CA可通过软件分发方法推出的组织中 - 没有理由花费支付Microsoft认证机构恰好相信。

在保密性方面,问题是包含您的根证书的私钥,只要您可以确保保持私密性,那么您可以验证任何根证书。

5

如果证书只在内部传递,在您自己的服务器之间传递(而不是由客户端使用,则以某种方式使用) - 那么使用自己的内部CA是完全可以接受的。然而,有一个建议 - 不要让你的根CA出现你的提供者证书。相反,使用您的根CA创建中间CA - 然后使用它来颁发提供程序证书。当您必须开始管理证书过期,扩展系统/基础设施,撤销列表等时,这将有助于您长期工作。

+0

感谢您的建议!你有任何关于这种做法的进一步信息的链接? – JohannesH 2009-02-09 11:44:00

+0

试试这个:http://technet.microsoft.com/en-us/library/dd277378.aspx#EGAA。至少要开始... – AviD 2009-02-09 20:28:06

7

由于您只使用证书来保护网络流量并且不对用户/计算机进行身份验证,这听起来像你有使用MakeCert.exe的合法用途。

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

考虑以下几点:

  • (几乎)在Windows Server的所有版本都包括证书服务器服务免费
  • Windows独立CA服务器是非常简单的安装和配置
  • 的Windows待机动独立的CA服务器可以安装在虚拟机上,并在需要颁发附加证书时打开/关闭
  • 基于VM的Windows独立CA服务器可以使用很少的内存(例如256MB)运行
  • Windows独立CA服务器包含一个非常干净的基于Web的注册界面,可简化请求证书。
  • 根据您的需要,可以使用或不使用CRL检查。

在过去我第一次使用selfssl.exe开始,最终转移到MakeCert.exe生成根证书,然后颁发我的客户端证书。但是在经过语法的努力之后,总是要记住我在哪里将根证书切换到在虚拟机中使用独立根CA。