【问题标题】:nginx client authentication with multiple client certificates具有多个客户端证书的 nginx 客户端身份验证
【发布时间】:2018-02-22 21:18:07
【问题描述】:

我正在尝试设置 NGINX 来针对多个客户端执行客户端身份验证。我遇到的问题是这些客户端将拥有不同的证书,基本上是不同的根 CA:

[clientA.crt] ClientA > IntermediateA > RootA
[clientB.crt] ClientB > IntermediateB1 > IntermediateB2 > RootB

我查看了 NGINX 文档,发现了 ssl_client_certificate 指令。但是,该属性本身似乎不起作用,例如,如果我现在将其配置为仅适用于 clientA:

ssl_client_certificate /etc/nginx/ssl/clientA.crt;   
ssl_verify_client on;

然后我收到了 400 错误代码。通过查看其他问题,我发现我还必须使用ssl_verify_depth: 3。因此,如果我想在捆绑 PEM 中连接 clientA 和 clientB 以允许两个客户端,我需要使用高值吗?该指令的目的是什么?使用捆绑的 PEM 设置为高数字意味着什么?

【问题讨论】:

  • 您的用例是什么?您希望拥有不同的客户端证书来对您的 nginx 进行身份验证吗?你能解释一下你想要实现的最终设置吗
  • @TarunLalwani 我想让不同的客户端证书针对同一个 NGINX 进行身份验证。

标签: ssl nginx


【解决方案1】:

http://nginx.org/r/ssl_client_certificate 指令用于指定您信任哪些证书用于基于客户端的身份验证。请注意,每次尝试连接时基本上都会发送整个列表(如果不需要,请根据文档使用ssl_trusted_certificate)。

如上所述,请注意ssl_verify_depth 基本上控制着进入您的系统的难易程度——如果您将其设置为足够高的值,并且有人能够获得具有以下 CA 之一的证书您信任,或者通过他们信任的中间人之一生成他们自己的证书,那么他们就可以通过您的 nginx 进行身份验证,无论您是否愿意。

因此,通常的做法是,用于基于客户端的身份验证的所有证书均由私人认可的 CA 生成,因此,通常链的长度不应过长。如果您想均衡两个 CA 之间的深度数,以从ssl_verify_depth 获得最佳保护,那么可以想象创建一个额外的 CA 以添加到深度,然后将该 CA 添加到受信任列表而不是现在的实际中介。 (请注意,一旦涉及到一些中介,它就会变得复杂,浏览器需要知道它们的存在,这通常是缓存的,并且在不缓存时可能会导致许多鬼问题。)

另外,请注意,您实际上不必在指定文件中拥有单个 CA — 它可以包含多个不相关的“根”CA,因此,如果您想添加多个独立的 CA,您实际上并没有不必费心创建另一个 CA 来对其进行认证——您可以按原样包含这些独立的 CA。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 2013-10-07
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多