我正在尝试使用 nginx 作为运行 Tomcat 的内部 Web 服务器的反向代理,该服务器托管我们的 ERP 系统的前端。
它已经运行良好:我可以完美地连接到 nginx 服务器(它被锁定在我们的网络上、不同的 VLAN、防火墙等等等等),然后反向代理到我的 ERP 服务器。
但是,我确实想增加一层额外的保护,要求用户在计算机上拥有数字证书,这样他们才能访问第一个 (nginx) 服务器。后端服务器不需要证书。
我已经看过这个教程了 http://nategood.com/客户端-side-certificate-authentication-in-ngi 这使得我能够生成自签名证书和其他所有内容。
使用时ssl_verify_client 可选在 nginx 配置上,我可以正常连接到我的后端服务器,但不需要/不需要证书。
当我将其切换到ssl_verify_client 开启,然后所有访问被阻止
400 Bad Request
No required SSL certificate was sent
无论我使用哪种浏览器(Chrome、IE、Edge、Firefox)。当然,我已将所有证书/证书链放在客户端计算机上,但任何浏览器都没有要求提供证书。我遗漏了什么?
这是我的完整 nginx 配置:
server {
listen 443;
ssl on;
server_name 103vportal;
ssl_password_file /etc/nginx/certs/senha.txt;
ssl_certificate /etc/nginx/certs/server.crt;
ssl_certificate_key /etc/nginx/certs/server.key;
ssl_client_certificate /etc/nginx/certs/ca.crt;
ssl_verify_client on;
location / {
proxy_pass http://10.3.0.244:16030;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 300;
proxy_send_timeout 300;
}
}
答案1
这个答案对我有用:
https://stackoverflow.com/questions/41933654/nginx-reverse-proxy-certificate-authentication
诀窍是创建个人证书(通过提供的命令)并使用证书下的主机名/DNS组合。