file-certificatePinning de SSL

El SSL Pinning, o Certificate Pinning, es una técnica de seguridad utilizada para garantizar que la aplicación establezca conexiones seguras solo con servidores previamente autorizados, mediante la verificación del certificado digital o de la clave pública presentada durante la negociación SSL/TLS. Este enfoque añade una capa extra de validación, independientemente del almacén de certificados del sistema operativo, reduciendo significativamente el riesgo de ataques del tipo Man-in-the-Middle (MITM), incluso en escenarios donde certificados raíz falsos estén instalados en el dispositivo.

El pinning de SSL asegura que únicamente la identidad criptográfica previamente configurada sea aceptada por la aplicación, impidiendo la intercepción, el análisis o la modificación de las solicitudes intercambiadas con el backend y protegiendo la confidencialidad y la integridad de los datos transmitidos.

Mecanismo Técnico: En lugar de confiar exclusivamente en la cadena de certificados del sistema operativo, el MAD valida el certificado presentado por el servidor comparándolo con uno o más pins criptográficos incrustados en la aplicación. Esos pins corresponden a hashes previamente definidos y almacenados de forma segura, y la conexión se considera válida solo cuando coincide con al menos uno de los valores configurados.

Para la configuración de Public Key Pinning, esta opción define las reglas de pinning para los dominios especificados. El MAD soporta dos métodos de pinning, definidos por el atributo type en el elemento <pin> a. Public Key Pinning (type="publicKey") Este es el método recomendado y por defecto. En este modo, se fija el hash del Subject Public Key Info (SPKI) del certificado. Este enfoque es más flexible, ya que permite que el certificado caduque y sea renovado sin la necesidad de actualizar la aplicación, siempre que se mantenga el mismo par de claves pública y privada.

Para generar el pin de la clave pública:

            openssl s_client -servername example.com -connect example.com:443 < /dev/null | \
            openssl x509 -pubkey -noout | openssl pkey -pubin -outform der | \
            openssl dgst -sha256 -binary | openssl enc -base64 

b. Certificate Pinning (type="certificate") En este método, se fija el hash del certificado digital completo. Se trata de un enfoque más restrictivo, ya que cualquier cambio en el certificado, incluidas renovaciones simples, exigirá la actualización de la aplicación para evitar fallos de conexión.

Para generar el pin del certificado:

            openssl s_client -servername example.com -connect example.com:443 < /dev/null | \
            openssl x509 -outform DER | openssl dgst -sha256 -binary | openssl enc -base64   

La configuración del certificate pinning se realiza mediante el XML de la aplicación. El modo de operación puede definirse como strict o permissive. En modo strict, la conexión será bloqueada si ningún pin válido coincide. En modo permissive, las fallas de pinning solo se reportan, siendo indicado para pruebas o entornos controlados.

Cada host define reglas específicas de pinning para un dominio determinado. Es posible utilizar comodines, como *.example.com, para abarcar subdominios. Cuando múltiples pins se configuran para un mismo host, la conexión se considerará válida si al menos uno de ellos coincide, permitiendo estrategias seguras de rotación de certificados.

Ejemplo de configuración:

<certificatePinning>

        <!-- Habilita la funcionalidad de certificate pinning -->
        <enabled>false</enabled>
        
        <!--
        El modo puede ser 'strict' o 'permissive'.
        - 'strict': La conexión solo tendrá éxito si al menos un pin coincide. Esto significa que si
        el host no está configurado o el pin no coincide, la conexión fallará.
        - 'permissive': Solo los hosts configurados aplicarán el certificate pinning.
        -->
<mode>permissive</mode> 

Nota: Los valores de pin deben proporcionarse en Base64, correspondientes al hash SHA -256 del certificado o de la clave pública.

Última actualización