Nginx 中 ssl_verify_client 指令有什么作用?

推荐答案

ssl_verify_client 指令用于配置 Nginx 是否要求客户端提供 SSL 客户端证书,并验证该证书的有效性。通过该指令,Nginx 可以强制客户端进行双向 SSL 认证,确保只有持有有效证书的客户端才能访问服务器。

本题详细解读

1. 指令作用

ssl_verify_client 指令用于控制 Nginx 是否要求客户端提供 SSL 客户端证书,并验证该证书的有效性。该指令通常用于实现双向 SSL 认证(Mutual SSL Authentication),即服务器和客户端都需要验证对方的证书。

2. 指令语法

  • on:强制要求客户端提供有效的 SSL 客户端证书,并且该证书必须由受信任的 CA 签发。
  • off:不要求客户端提供 SSL 客户端证书(默认值)。
  • optional:客户端可以选择是否提供 SSL 客户端证书。如果提供了证书,Nginx 会验证其有效性。
  • optional_no_ca:客户端可以选择是否提供 SSL 客户端证书。即使提供了证书,Nginx 也不会验证其是否由受信任的 CA 签发。

3. 使用场景

  • 安全性要求高的场景:在需要高安全性的场景中,如金融、医疗等领域,使用 ssl_verify_client on 可以确保只有持有有效证书的客户端才能访问服务器。
  • 选择性认证:在某些场景中,可能只需要部分客户端提供证书,可以使用 ssl_verify_client optionaloptional_no_ca

4. 配置示例

-- -------------------- ---- -------
------ -
    ------ --- ----
    ----------- ------------

    --------------- --------------------
    ------------------- --------------------

    ----------------- ---
    ---------------------- ----------------

    -------- - -
        ---------- ---------------
    -
-

在这个示例中,Nginx 要求客户端提供有效的 SSL 客户端证书,并且该证书必须由 /path/to/ca.crt 指定的 CA 签发。

5. 注意事项

  • 使用 ssl_verify_client on 时,必须配置 ssl_client_certificate 指令,指定用于验证客户端证书的 CA 证书。
  • 如果客户端未提供证书或提供的证书无效,Nginx 将返回 400 错误(Bad Request)。
  • 在某些情况下,可能需要调整 ssl_verify_depth 指令来控制证书链的验证深度。
纠错
反馈