我在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只对某些客户端证书进行身份验证。这是因为我使用私有RootCA来生成A类型证书和B类型证书。A类证书与用于auth的MQTT一起使用,B类证书用于Nginx (HTTPS
)身份验证。
MQTT的客户端证书(类型A)对于每个客户端.example.com
都是唯一的。Nginx的客户端证书(B类型)将具有名称(DN) base.example.com
&证书将在多个客户端之间共享。同样,同一名称(DN) base.example.com
和不同证书ID的B类型证书一次活动的数量有限。
在这个问题上有什么帮助我怎么能做到这一点?
发布于 2021-05-17 17:30:49
所有证书都将被验证,但仍然可以通过检查客户端证书的DN来拒绝来自连接的请求。
例如:
server {
if ($ssl_client_s_dn !~ \bbase\.example\.com\b) { return 403; }
...
}
https://serverfault.com/questions/1063842
复制相似问题