合格证书
问题描述:
我有一个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;
}
}
答
后端服务器正在生成400错误,因为它从不收到任何客户端证书。所有传入的SSL会话都将在反向代理处终止。反向代理然后创建一个新的会话连接到后端。通常,代理在尝试连接时不会发送客户端证书,因此您的错误。
如果要强制执行与到位反向代理后端客户端证书验证,您可以使用指令proxy_ssl_certificate
,proxy_ssl_certificate_key
,并proxy_ssl_verify
反向代理服务器上。这将使代理使用自己的客户端证书对后端进行身份验证。这与支持接收和验证原始客户端证书不同,因为它们不会连接到后端。
如果您需要将原始客户端证书信息传递到后端,可以通过在连接到后端时在请求标头中发送变量$ssl_client_cert
来实现。 This page有一个使用各种证书属性的示例。请注意,这与验证原始客户端证书的后端仍然不同,但可以用于类似的效果,假设后端信任反向代理,反之亦然。
目前,后端服务器无法在反向代理后验证原始客户端证书。这不是Nginx(或Apache)的限制,而是由于SSL在使用客户端证书身份验证时的工作原理。
发布您的nginx配置 –
对于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; } } –
发布有问题,而不是评论。并且发布双方配置 –