我是否应该对内部服务器证书、外部客户端证书和 HTTPS 证书使用单独的根 CA?

我是否应该对内部服务器证书、外部客户端证书和 HTTPS 证书使用单独的根 CA?

对于以下情况,我是否应该有 3 个根 CA、1 个根 CA + 3 个中间 CA 或其他一些 PKI 设置?

我有三个用例:

  1. 通过 HTTPS(服务器证书)公开 Web API
  2. 允许客户端使用客户端证书而不是用户名/密码(外部客户端证书)进行身份验证
  3. 验证内部服务器作为客户端(内部客户端证书)

每个密钥对只会用于一种用例。

假设我不需要第三方 CA,而是在封闭系统中使用自定义 PKI。我可以看到两种支持此功能的主要方法:

  1. 1 个根 CA 和 3 个中间 CA(每个案例一个中间 CA)
  2. 3 个根 CA(每个用例一个根)

我尝试过启动 #1,但我发现,为了openssl s_client针对 node.js HTTPS 服务器测试客户端证书,我需要从中间到根进行验证,而不仅仅是中间。这意味着用例 2 和用例 3 之间的客户端证书可以互换,因为根是信任锚。我四处寻找,但找不到让中间 CA 成为 node.js HTTPS 服务器信任锚的方法。

所以,我严重误解了一些东西,我需要转到实现#2,或者混合使用两者。

答案1

X.509 证书可以提供机密性和身份验证。也就是说,它们可以用于链接的加密,也可以选择用于对用户或服务器进行身份验证。

它们不提供授权。相反,由应用程序来判断是否允许已使用 X.509 证书进行身份验证的实体访问资源。

这意味着上面的 (1) 是可以的。使用一个 root 并确保通过另一种方式进行授权。

但是,如果您坚持 X.509 证书也应提供授权,则您需要:

  • 依靠证书策略来确保应用程序只信任某些证书 - 祝你好运,因为您可能需要编写自己的应用程序来检查策略;
  • 对每个应用程序使用不同的根证书;如上面的(2)所述。

相关内容