2017-08-25 10 views
0

J'ai un serveur Ngnix [Fronde Fin dire xx.xx] et un autre serveur Ngnix [Autre serveur principal YY.YY dire]certificat de passage de Ngnix serveur vers d'autres Nginx serveur pour l'authentification client

si vous utilisez commande curl i je passe cetificate client et la clé sur le serveur YY.YY je reçois le succès du serveur principal

problème: si vous utilisez commande curl je passe cetificate client et la clé sur le serveur xx.xx je reçois erreur

400 Bad Demande

Pas de req certificat SSL uired a été envoyé

Donc dans mon cas xx.xx n'est pas le certificat au serveur YY.yy passait

S'il vous plaît aidez-moi

Pour serveur 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

Publiez vos configurations nginx –

+0

Pour le serveur xx.xx serveur { écoute 443; nom_serveur xx.xx; ssl activé; ssl_certificate /etc/xx.cert.pem; ssl_certificate_key /etc/xx.key; emplacement ~ ^/SCB /(.*)$ { proxy_set_header X-SSL-CERT $ ssl_client_cert; réécriture /SCB(.*) pause de 1 $; proxy_pass https: //yy.yy: 443; } } –

+0

Postez cela en question et non dans les commentaires. Et poster les deux configurations secondaires –

Répondre

0

Le back-end Le serveur génère l'erreur 400 car il ne reçoit jamais de certificat client. Toutes les sessions SSL entrantes sont terminées au niveau du proxy inverse. Le proxy inverse crée ensuite une nouvelle session pour se connecter au backend. Normalement, le proxy n'envoie pas de certificat client lors de la tentative de connexion, d'où votre erreur. Si vous souhaitez appliquer l'authentification du certificat client au backend avec le proxy inverse en place, vous pouvez utiliser les directives proxy_ssl_certificate, proxy_ssl_certificate_key et proxy_ssl_verify sur le serveur proxy inverse. Cela permettrait au proxy de s'authentifier auprès du backend avec son propre certificat client. Ce n'est pas la même chose que la réception et la validation des certificats clients d'origine, car ils ne sont pas transmis dans la connexion au backend.

Si vous devez transmettre les informations du certificat client d'origine au serveur principal, vous pouvez le faire en envoyant la variable $ssl_client_cert dans un en-tête de requête lors de la connexion au backend. This page a un exemple utilisant diverses propriétés de certificat. Notez que ce n'est toujours pas la même chose que le backend validant le certificat client d'origine, mais peut être utilisé à un effet similaire, en supposant que le backend approuve le proxy inverse, et vice-versa.

Actuellement, il n'est pas possible pour le serveur dorsal de valider le certificat client d'origine alors qu'il se trouve derrière un proxy inverse. Ceci n'est pas une limitation de Nginx (ou d'Apache), mais est dû au fonctionnement de SSL lors de l'utilisation de l'authentification par certificat client.