我可以使用 nginx 在不同位置使用不同的客户端证书吗

我可以使用 nginx 在不同位置使用不同的客户端证书吗

我的服务器上有两个不同的位置:

  • 服务器/位置A
  • 服务器/位置B

我想使用两个客户端证书 certA 和 certB 来限制对这些位置的访问。

只能使用 certA 才能访问 locationA,而只能使用 certB 才能访问 locationB。

到目前为止我使用不同的端口这样做:

server {

  listen 11111 ssl;
  server_name ServerA;

  ssl_certificate server.crt;
  ssl_certificate_key server.key;

  ssl_client_certificate certA.crt;
  ssl_verify_client optional;


  location /A {
    if ($ssl_client_verify != SUCCESS) {
      return 403;
    }
    alias /www/data/files/A.html;
  }
}

server {

  listen 22222 ssl;
  server_name ServerB;

  ssl_certificate server.crt;
  ssl_certificate_key server.key;

  ssl_client_certificate certB.crt;
  ssl_verify_client optional;


  location /B {
    if ($ssl_client_verify != SUCCESS) {
      return 403;
    }
    alias /www/data/files/B.html;
  }
}

我现在的问题是,是否可以将两个位置都放在同一个端口,例如 (服务器/A 和服务器/B,而不是服务器:11111/A 和服务器:22222/B)? 我需要如何构建我的 nginx 配置才能实现这一点?

答案1

不可以。证书适用于服务器块,因为它必须与服务器名称相对应。

不可能只针对一个位置使用不同的证书。

但是,您只需要不同的服务器块,而且您已经拥有了它。只需添加两个端口为 443 的服务器块,使用不同的server_name服务器块及其相应的证书即可。

相关内容