我试图使用nginx作为运行Tomcat的内部Web服务器的反向代理,该服务器托pipe着我们的ERP系统的前端。
它已经正常工作了:我可以完美地连接到nginx服务器(这是locking在我们的networking,不同的VLAN,防火墙等等),然后反向代理到我的ERP服务器。
但是,我想要添加一个额外的保护层,要求用户在他们的计算机上有一个数字证书,以便他们可以访问第一个(nginx)服务器。 后端服务器不使用/不需要证书。
我已经通过这个教程http://nategood.com/client-side-certificate-authentication-in-ngi ,它允许我生成我的自签名证书和其他一切。
当在nginxconfiguration中使用ssl_verify_client可选时,我可以正常连接到我的后端服务器,但是不需要/不需要证书。
当我把它切换到ssl_verify_client时 ,所有的访问都被阻塞了
400 Bad Request No required SSL certificate was sent
无论使用哪种浏览器(Chrome,IE,Edge,Firefox)。 当然,我已经把所有的证书/链条放在我的客户端计算机上,但是在任何浏览器上都没有证书。 我错过了什么?
这里是我的完整的nginxconfiguration:
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; } }
假设您已经为您的用户生成了一个私钥和一个证书请求,并将其与您的客户端CA进行了签名。 您需要将私钥和签名证书放入浏览器中的个人证书列表中。
我发现最好的办法是创建一个密码保护的PKCS#12(因为一些浏览器坚持密码保护)。 我使用下面的OpenSSL命令:
cat user.key user.crt | openssl pkcs12 -export -out user.p12