使用nginx的proxy_pass时,客户端身份验证(client authentication

2019-09-29 12:12发布

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

我有一个HTTP服务器和我需要重定向使用HTTPS请求。 我用以下语句:proxy_pass HTTPS://secure.server在Wireshark中我看到有一个SSL握手,而客户端(nginx的proxy_pass HTTPS :)没有对服务器的SSL证书请求发送证书。 验证客户端证书的服务器是必要的。 我怎么能强迫proxy_pass发送客户端证书使用HTTPS时? 下面是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;
            }

    }

Answer 1:

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

在其他SSL配置添加这样的:

ssl_verify_client on;

这里查看更多信息。



Answer 2:

我在寻找相同的解决方案,以及。

我发现SEnginx,其中有一个名为“代理HTTPS客户端证书”模块。 从描述似乎是应允许客户端证书,但我无法得到它为我工作。 后端服务器根本不会提示客户端提供的证书。

以下是链接到SEnginx 。

另外: 这里是一个可能的解释,为什么这也许是不可能的。



Answer 3:

在SSL握手,服务器将发送“客户端证书的CA名称”。 (IE),服务器将只从这些CA接受客户证书。 客户端将发送发送客户端证书只有同时具备这些CA签名的证书

所以你的情况,验证1. CA名称发送服务器为客户端证书请求。 这将是你在服务器的信任配置CAS中。 (IE)在SSL握手找CertificateRequest消息

  1. 确保你的客户证书是由那些CA之一签署

  2. 最好的选择是验证与卷曲,无论您的客户端和服务器证书的配置正确卷曲-vvv --cert /usr/local/cert.pem HTTPS://secure.server如果您无法使用curl输出弄清楚请粘贴输出卷曲



文章来源: client authentication when using nginx proxy_pass
标签: nginx