使用nginx proxy_pass时的客户端身份验证

时间:2013-02-11 12:08:00

标签: nginx

我的问题是关于nginx指令“proxy_pass”。

我有一个http服务器,我需要使用https重定向请求。 我正在使用以下声明: proxy_pass https://secure.server 在wireshark中,我看到有一个SSL握手,但是客户端(nginx proxy_pass https :)没有在服务器的SSL证书请求上发送证书。 服务器需要验证客户端证书。使用https时,如何强制proxy_pass发送客户端证书? 以下是nginx.conf配置文件的一部分:

server {
    listen  8888;
    server_name     _;
    error_page 405 =200 $uri;
    ssl_certificate       /usr/local/cert.pem;
    ssl_certificate_key   /usr/local/cert.pem                                          
    ssl_client_certificate  /usr/local/ca.cer;       

    location ~ /uri/(.+) {

                    proxy_pass https://secure.server;
                    break;
            }

    }

3 个答案:

答案 0 :(得分:0)

您需要启用SSL客户端证书验证。

在其他SSL配置下添加:

ssl_verify_client on;

See more information here.

答案 1 :(得分:0)

我也在寻找相同的解决方案。

我找到了SEnginx,它有一个名为“代理HTTPS客户端证书”的模块。从描述看来应该允许客户端证书,但我无法让它为我工作。后端服务器根本不会提示客户端提供证书。

以下是指向SEnginx的链接。

另外:Here可能解释为什么这可能无法实现。

答案 2 :(得分:0)

在ssl握手期间,服务器将发送“客户端证书ca名称”。 (即)服务器仅接受来自那些CA的客户端证书。客户端只有在具有那些CA签名的证书的情况下,才会发送发送客户端证书。

因此,请验证  1.服务器为客户端证书请求发送的CA名称。这将是您在服务器的信任库中配置的CA。 (ie)在ssl握手期间寻找CertificateRequest消息

  1. 确保您的客户端证书已由其中一个CA签名

  2. 最佳选择是使用curl进行验证,客户端和服务器证书均已正确配置 curl -vvv --cert /usr/local/cert.pem https://secure.server 如果无法弄清卷曲输出,请粘贴卷曲输出