SSL y Reverse Proxy

Toda la publicación de servicios de la plataforma, dado que se intercambian datos sensibles tienen que ser cifrados mediante SSL, por tal motivo es vital la presencia dentro de la plataforma de un reverse proxy, el mismo provee los siguientes beneficios:

  • Seguridad.
  • Abstracción de la implementación.
  • Ruteo de http.
  • DoS (Protección de Denial of Service).
  • Protección de Inyección de SQL o JSON.

Para hacer la instalación de los certificados dentro de apache2 se tienen que seguir los siguientes pasos:

  • Obtención de certificado binario PFX.
  • Creación de CSRs para certificados PEM y PK.
  • Instalación de los certificados.
  • Apertura de los puertos 443 de los firewall.
  • Configuración de servidor y reverse proxy.
  • Confirmar que el sistema está escuchando en el port de HTTS.

Creación de CSRs para certificados PEM y PK

Para la creación de estos certificados es necesario seguir el siguiente procedimiento, previo verificar que se encuentre instalado dentro del servidor la aplicación openssl. Desplazarse al directorio /etc/pki/tls/http y desde el mismo correr el siguiente comando:

openssl pkcs12 –in cert.pfx –nocerts –nodes –out sysone.key

Con este comando se obtendrá la clave pública del certificado pfx para luego configurarla en apache. Luego de esto para obtener el certificado digital a proveer desde apache se deberá correr el siguiente comando:

openssl pkcs12 –in cert.pfx –clcerts –nokeys –out sysone.pem

En ambos casos la aplicación SSL deberá chequear la MAC de verificación solicitando la password. Esta password está compuesta por la password master del certificado provista a la hora de la contratación concatenada con los caracteres que especifica la orden de compra en el detalle.

Instalación de los certificados

Para la instalación de los certificado para reverse proxy es necesario tener en cuenta el siguiente escenario de negocio. La mayor cantidad de proxies reversos y su utilización:

  • Reverse Proxy localizado en la DMZ de la empresa.
  • Aplicaciones web que se encuentran dentro de un VLAN.
  • El proxy reverso maneja el request y luego la direcciona a otra aplicación interna de la plataforma.

El problema que se enfrenta este escenario es que las autenticaciones X509 vía proxy para los clientes pueden ser conflictivas. Por definición el contenido cifrado por X509 no puede ser espiado o interceptado. Si tenemos un porxy reverso en medio del cliente y la aplicación web el flujo se romperá y no serán válidos los requests enviados. El desafío está en poder utilizar el módulo de encabezados de apache para poder enviar manualmente los datos de los clientes. Por supuesto, por razones de seguridad, usted tiene que configurar el proxy inverso para que sólo permita certificado de cliente deseado (basado en el AC, por ejemplo).

Para activar los módulos de header o mod_header se deberá correr el siguiente comando:

# sudo a2enmod headers

Una vez que se tiene este módulo configurado correctamente se deberá configurar la locación y todo el motor de SSL para apache.

# activate HTTPS on the reverse proxy
SSLEngine On
SSLCertificateFile    /etc/pki/tls/http/sysone.pem
SSLCertificateKeyFile /etc/pki/tls/http/sysone.key


AddDefaultCharset Off
Order deny,allow
Allow from all


# initialize the special headers to a blank value to avoid http header forgeries
RequestHeader set SSL_CLIENT_S_DN    ""
RequestHeader set SSL_CLIENT_I_DN    ""
RequestHeader set SSL_SERVER_S_DN_OU ""
RequestHeader set SSL_CLIENT_VERIFY  ""


# add all the SSL_* you need in the internal web application
RequestHeader set SSL_CLIENT_S_DN "%{SSL_CLIENT_S_DN}s"
RequestHeader set SSL_CLIENT_I_DN "%{SSL_CLIENT_I_DN}s"
RequestHeader set SSL_SERVER_S_DN_OU "%{SSL_SERVER_S_DN_OU}s"
RequestHeader set SSL_CLIENT_VERIFY "%{SSL_CLIENT_VERIFY}s"

ProxyPass          http://srv-crm:50161/
ProxyPassReverse   http://srv-crm:50161/

Confirmación de SSL Engine

Para estar seguros de que la configuración realizada está funcionando se deberá ejecutar la siguiente secuencia de comandos:

[root@srv-gate conf.d]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

Una vez que el servidor http se haya reiniciado ejecutar la siguiente instrucción

[root@srv-gate conf.d]# netstat -na | grep LISTEN
tcp        0      0 127.0.0.1:2208              0.0.0.0:*                   LISTEN      
tcp        0      0 0.0.0.0:651                 0.0.0.0:*                   LISTEN      
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      
tcp        0      0 127.0.0.1:2207              0.0.0.0:*                   LISTEN      
tcp        0      0 :::80                       :::*                        LISTEN      
tcp        0      0 :::22                       :::*                        LISTEN      
tcp        0      0 :::443                      :::*                        LISTEN

Se deberá verificar que el servidor se encuentra escuchando requerimientos en el puerto de HTTPS (443).

results matching ""

    No results matching ""