Nginx
Nginx SSL 身份驗證幕客戶端證書
我使用以下配置使用帶有 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 來拒絕使用其他證書的連接請求。
例如:
server { if ($ssl_client_s_dn !~ \bbase\.example\.com\b) { return 403; } ... }