Nginx SSL auth curtain 客户端证书

Nginx SSL auth curtain 客户端证书

我已使用以下配置运行 Nginx 和 TLS 身份验证。所有具有有效客户端证书的请求都将在 Nginx 处终止,并且请求将转发到后端应用程序。


    upstream app {
        server app:8080;
    }

    server {
        listen                 443 ssl;
        server_name            localhost;
        ssl_certificate        /etc/ssl/cert_example_com.crt;
        ssl_certificate_key    /etc/ssl/cert_example_com.key;
        ssl_client_certificate /etc/ssl/ca.crt;
        ssl_protocols          TLSv1.2 TLSv1.3;
        ssl_ciphers            HIGH:!aNULL:!MD5;
        ssl_verify_client      on;

        location / {
                proxy_pass         http://app;
                proxy_set_header   X-Forwarded-For $remote_addr;
                proxy_http_version 1.1;
                proxy_set_header   Upgrade $http_upgrade;
                proxy_set_header   Connection 'upgrade';
                proxy_set_header   Host $host;
                proxy_cache_bypass $http_upgrade;
        }
    }

通过此配置,我希望 Nginx 仅验证某些客户端证书。这是因为我使用 Private RootCA 生成 A 类证书和 B 类证书。A 类证书与 MQTT 一起用于身份验证,B 类证书用于 Nginx ( HTTPS) 身份验证。

MQTT 的客户端证书(类型 A)对于每个客户端都是唯一的<UUID>.example.com。Nginx 的客户端证书(类型 B)将具有名称 (DN),并且证书将在多个客户端之间共享。此外,一次激活的具有相同名称 (DN)和不同证书 IDbase.example.com的类型 B 证书数量将有限。base.example.com

有什么帮助我如何才能实现这一目标吗?

答案1

所有证书都将被验证,但您仍然可以通过检查客户端证书的 DN 来拒绝使用其他证书的连接的请求。

例如:

server {
    if ($ssl_client_s_dn !~ \bbase\.example\.com\b) { return 403; }
    ...
}

相关内容