J'ai deux serveurs, les deux ont nginx. Le serveur A écoute 443 et est configuré pour s'authentifier avec un certificat SSL client.
Le serveur B a un processus interne qui doit communiquer avec le serveur A via nginx.
Je voudrais configurer Nginx sur le serveur B qui écoutera 8080 (pas de cryptage, car il s'agit uniquement de communications locales) et proxy_pass vers ServerA: 443.
La question est de savoir comment injecter un certificat client? Je n'ai trouvé aucune fonction proxy_xxxx qui ferait cela.
Je sais comment faire un équivalent à celui avec socat, mais mon exigence est d'utiliser nginx.
nginx
proxy
ssl-certificate
Bastien974
la source
la source
### Section 2: Unconverted directives ###
# Flag Description
# [S] Unsupported directives.
# In conf file: dummy.conf
# Line 32: SSLProxyMachineCertificateFile /path/to/cert (mod_ssl.c)
# [S] SSLProxyMachineCertificateFile: No relevant directive in Nginx.
Réponses:
Suffit-il de faire passer les détails du certificat client?
Vous pouvez ajouter
à votre configuration, puis les informations de certificat sont disponibles sur le serveur B via un en-tête X-SSL-Cert.
la source
\t
par à\n
partir de cet en-tête une fois lu.$ssl_client_cert
variable est déconseillée; la$ssl_client_escaped_cert
variable doit être utilisée à la place.Apparemment, c'est ce que vous recherchez: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_ssl_certificate Disponible depuis la version 1.7.8.
la source
Le problème semble dépendre largement de la version. Sur Ubuntu 14.04 LTS, le nginx par défaut est un 1.4 obsolète. Vous devez d'abord installer une version basée sur PPA
https://leftshift.io/upgrading-nginx-to-the-latest-version-on-ubuntu-servers
montre comment procéder avec:
vous devriez vous retrouver avec:
La configuration de @ xatr0z répond à https://serverfault.com/a/636455/162693 pointant vers http://www.senginx.org/en/index.php/Proxy_HTTPS_Client_Certificate ne fonctionne pas:
proposition non fonctionnelle
ne fonctionne pas avec la version 1.8.0. Il est probablement conçu uniquement à titre indicatif et ne doit pas être utilisé comme fichier de configuration en tant que tel ou dépend d'une autre version.
Je teste avec un serveur backend A basé sur apache2 avec SSL et certificats clients auto-signés activés. Les SSLOptions de configuration Apache sont définies sur:
Cela facilite le débogage de la situation car un script phpinfo () du côté backend affichera les informations côté serveur et côté client.
Pour vérifier cela, j'ai utilisé:
https: // backend / test / phpinfo
avec le certificat SSL installé dans le navigateur et j'obtiens des sections comme: SSL_SERVER_S_DN_CN pour le certificat serveur et SSL_CLIENT_S_DN_CN pour le certificat client.
Comme premier démarrage, j'ai utilisé (remplissez les parties entre parenthèses) pour configurer nginx sur le serveur frontal B:
décourager la partie spécifique du certificat client SSL juste pour vérifier que le proxy inverse lui-même fonctionne.
Maintenant, http: // frontend: 8080 / test / phpinfo.php fonctionne
SSL_SERVER_S_DN_CN pour le certificat serveur est affiché et SSL_CLIENT_S_DN_CN pour le certificat client n'est pas (encore) affiché
Maintenant, sans commenter:
et vérification / redémarrage
http: // frontend: 8080 / test / phpinfo.php fonctionne et
SSL_SERVER_S_DN_CN pour le certificat de serveur s'affiche et SSL_CLIENT_S_DN_CN pour le certificat client s'affiche
alors maintenant nous avons fait fonctionner les choses comme demandé.
Veuillez noter le bug https://trac.nginx.org/nginx/ticket/872#ticket
la source
Il y a un article assez soigné sur les certificats clients nginx et SSL; il utilise PHP avec FastCGI comme exemple mais je pense que vous pouvez l'adapter à une configuration de proxy inverse:
Source http://nategood.com/client-side-certificate-authentication-in-ngi
la source
Il semble que ce module SEnginx soit ce que vous recherchez: http://www.senginx.org/en/index.php/Proxy_HTTPS_Client_Certificate
la source