nginx - 反向代理证书身份验证

时间:2017-01-30 10:30:49

标签: ssl nginx proxy

我正在尝试使用nginx作为运行Tomcat的内部Web服务器的反向代理,Tomcat是我们ERP系统的前端。

它已经正常工作:我可以完美地连接到nginx服务器(它被锁定在我们的网络,不同的VLAN,防火墙等等),然后反向代理到我的ERP服务器。

但是,我希望通过要求用户在其计算机上拥有数字证书来添加额外的保护层,以便他们可以访问第一个(nginx)服务器。后端服务器不使用/不需要证书。

我已经完成了本教程 http://nategood.com/client-side-certificate-authentication-in-ngi 这让我可以生成自签名证书和其他所有证书。

在nginx配置中使用 ssl_verify_client可选时,我可以正常连接到我的后端服务器,但不会询问/需要证书。

当我将其切换为 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 个答案:

答案 0 :(得分:1)

假设您已为用户生成了私钥和证书请求,并与您的客户CA签名。您需要将私钥和签名证书放入浏览器中的个人证书列表中。

我发现最好的方法是创建受密码保护的PKCS#12(因为有些浏览器坚持密码保护)。我使用以下OpenSSL命令:

cat user.key user.crt | openssl pkcs12 -export -out user.p12