Tengo dos servidores, ambos tienen nginx. El servidor A está escuchando 443 y está configurado para autenticarse con un certificado SSL de cliente.
El servidor B tiene un proceso interno que necesita comunicarse con el servidor A a través de nginx.
Me gustaría configurar Nginx en el servidor B que escuchará 8080 (sin cifrado, ya que es toda la comunicación local) y proxy_pass al servidor A: 443.
La pregunta es ¿cómo puedo inyectar un certificado de cliente? No encontré ninguna función proxy_xxxx que hiciera eso.
Sí sé hacer un equivalente a eso con socat, pero mi requisito es usar nginx.
nginx
proxy
ssl-certificate
Bastien974
fuente
fuente
### 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.
Respuestas:
¿Es suficiente que se pasen los detalles del certificado del cliente?
Puedes añadir
a su configuración y luego la información del certificado está disponible para el servidor B a través de un encabezado X-SSL-Cert.
fuente
\t
con\n
de esta cabecera, una vez leido.$ssl_client_cert
variable está en desuso; la$ssl_client_escaped_cert
variable debe usarse en su lugar.Aparentemente, esto es lo que está buscando: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_ssl_certificate Disponible desde la versión 1.7.8.
fuente
El problema parece ser en gran medida dependiente de la versión. En Ubuntu 14.04 LTS, el nginx predeterminado es un 1.4 obsoleto. Primero necesitas instalar una versión basada en PPA
https://leftshift.io/upgrading-nginx-to-the-latest-version-on-ubuntu-servers
muestra cómo hacer esto con:
deberías terminar con:
La configuración de @ xatr0z responde https://serverfault.com/a/636455/162693 que apunta a http://www.senginx.org/en/index.php/Proxy_HTTPS_Client_Certificate no funciona:
propuesta que no funciona
no funciona fuera de la caja con 1.8.0. Probablemente sea solo una pista y no se use como un archivo de configuración como tal o dependa de otra versión.
Estoy probando con un servidor backend A basado en apache2 con SSL y certificados de cliente autofirmados habilitados. Las SSLOptions de configuración de Apache están configuradas en:
Esto facilita la depuración de la situación, ya que un script phpinfo () en el lado del servidor mostrará la información del lado del servidor y del cliente.
Para verificar esto, utilicé:
https: // backend / test / phpinfo
con el certificado SSL instalado en el navegador y obtengo secciones como: SSL_SERVER_S_DN_CN para el certificado del servidor y SSL_CLIENT_S_DN_CN para el certificado del cliente.
Como primer inicio, utilicé (complete las partes entre paréntesis) para configurar nginx en el servidor frontend B:
no comentar la parte específica del Certificado de cliente SSL solo para verificar que el proxy inverso funcione.
Ahora http: // frontend: 8080 / test / phpinfo.php funciona.
Se muestra SSL_SERVER_S_DN_CN para el certificado del servidor y SSL_CLIENT_S_DN_CN para el certificado del cliente (todavía) no se muestra
Ahora después de descomentar:
y comprobando / reiniciando
http: // frontend: 8080 / test / phpinfo.php funciona y
SSL_SERVER_S_DN_CN para el certificado de servidor se muestra y SSL_CLIENT_S_DN_CN del certificado de cliente se visualiza
así que ahora tenemos las cosas funcionando según lo solicitado.
Tenga en cuenta el error https://trac.nginx.org/nginx/ticket/872#ticket
fuente
Hay un artículo bastante bueno sobre los certificados de cliente nginx y SSL; usa PHP con FastCGI como ejemplo, pero creo que se puede adaptar a una configuración de proxy inverso:
Fuente http://nategood.com/client-side-certificate-authentication-in-ngi
fuente
Parece que este módulo SEnginx es lo que está buscando: http://www.senginx.org/en/index.php/Proxy_HTTPS_Client_Certificate
fuente