1

我的问题是关于 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;
            }

    }
4

3 回答 3

0

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

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

以下是SEnginx的链接。

另外:是一个可能的解释,说明为什么这可能是不可能的。

于 2014-11-13T20:01:00.977 回答
0

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

在其他 SSL 配置下添加:

ssl_verify_client on;

在此处查看更多信息。

于 2013-02-20T00:37:17.867 回答
0

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

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

  1. 确保您的客户端证书由这些 CA 之一签名

  2. 最好的选择是使用 curl 进行验证,您的客户端和服务器证书均已正确配置 curl -vvv --cert /usr/local/cert.pem https://secure.server 如果您无法通过 curl 输出找出答案,请粘贴 curl 输出

于 2019-06-30T20:58:26.767 回答