合格证书

问题描述:

我有一个Ngnix服务器[前端处说XX.XX]等Ngnix服务器合格证书

如果我使用curl命令[其他后端服务器yy.yy说]我通过客户端cetificate和关键yy.yy服务器上我是从后端服务器获取成功

问题:如果 使用curl命令我传递客户端cetificate和关键XX.XX服务器上的我得到错误

400错误的请求

否req uired SSL证书被送往

所以在我的情况XX.XX不流通证书yy.yy服务器

请帮我

对于yy.yy服务器

server { 
    listen  443; 

    server_name yy.yy 
    ssl on; 
    ssl_certificate  /etc/yyyycert.pem; 
    ssl_certificate_key /etc/yy.key; 
    ssl_client_certificate /etc/ca-chain-scb.cert.pem; 
    ssl_verify_client on; 
    location/{ 
     proxy_set_header  Host   $host; 
     proxy_set_header  X-Real-IP  $remote_addr; 
     proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header  X-Forwarded-User  $remote_user; 
     proxy_pass http://127.0.0.1:8080; 
     } 
} 

server { 
    listen  443; 

    server_name xx.xx 
    ssl on; 
    ssl_certificate  /etc/xxxx.pem; 
    ssl_certificate_key /etc/xx.key; 
    ssl_verify_client on; 
    location ~ ^/SCB/(.*)$ { 
     proxy_set_header X-SSL-CERT $ssl_client_cert; 
     rewrite /SCB(.*) $1 break; 
     proxy_pass https://yy.yy:443; 
    } 
} 
+0

发布您的nginx配置 –

+0

对于xx.xx服务器 服务器{ listen 443; server_name xx.xx; ssl on; ssl_certificate /etc/xx.cert.pem; ssl_certificate_key /etc/xx.key; location_ ^/SCB /(.*)$ {proxy_set_header X-SSL-CERT $ ssl_client_cert; 重写/SCB(.*)$ 1 break; proxy_pass https://yy.yy:443; } } –

+0

发布有问题,而不是评论。并且发布双方配置 –

后端服务器正在生成400错误,因为它从不收到任何客户端证书。所有传入的SSL会话都将在反向代理处终止。反向代理然后创建一个新的会话连接到后端。通常,代理在尝试连接时不会发送客户端证书,因此您的错误。

如果要强制执行与到位反向代理后端客户端证书验证,您可以使用指令proxy_ssl_certificateproxy_ssl_certificate_key,并proxy_ssl_verify反向代理服务器上。这将使代理使用自己的客户端证书对后端进行身份验证。这与支持接收和验证原始客户端证书不同,因为它们不会连接到后端。

如果您需要将原始客户端证书信息传递到后端,可以通过在连接到后端时在请求标头中发送变量$ssl_client_cert来实现。 This page有一个使用各种证书属性的示例。请注意,这与验证原始客户端证书的后端仍然不同,但可以用于类似的效果,假设后端信任反向代理,反之亦然。

目前,后端服务器无法在反向代理后验证原始客户端证书。这不是Nginx(或Apache)的限制,而是由于SSL在使用客户端证书身份验证时的工作原理。