我使用以下配置使用带有 TLS 身份验证的 Nginx。所有具有有效客户端证书的请求都将在 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)base.example.com
,并且证书将在多个客户端之间共享。base.example.com
此外,同一名称 (DN)和不同证书 ID的 B 类证书数量有限。
对此有什么帮助我怎么能做到这一点?
所有证书都将被验证,但您仍然可以通过检查客户端证书的 DN 来拒绝使用其他证书的连接请求。
例如: