ctt-gob-es / clienteafirma

Cliente @firma
http://administracionelectronica.gob.es/ctt/clienteafirma
247 stars 120 forks source link

Establecer version de TLS expresamente a 1.2 #307

Open albfernandez opened 1 year ago

albfernandez commented 1 year ago

https://github.com/ctt-gob-es/clienteafirma/blob/e881f67457a10a6e43ec912e8353af6bde006548/afirma-simple/src/main/java/es/gob/afirma/standalone/protocol/SecureSocketUtils.java#L27

Se está indicando que use TLSv1 y aparentemente está usando TLS v1.3 en Linux y está dando errores al conectarse desde los navegadores en Linux. Una opción es desactivar TLS 1.3 en java como se indica en #265, pero es preferible que autofirma lo establezcla expresamente.

En windows no está dando este problema.

En cualquier caso creo que sería lo correcto indicar aquí

private static final String SSLCONTEXT = "TLSv1.2"; //$NON-NLS-1$ 

Otra opción es establecer ese parámetro dependiendo del sistema operativo, dejando en windows su valor actual y usando "TLSV1.2" en Linux.

albfernandez commented 1 year ago

Relacionado (y posiblemente solución) #265

albfernandez commented 1 year ago

He investigado algo más el tema. En la instalación de autofirma de windows, el valor jdk.tls.disabledAlgorithms

jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, DH keySize < 1024, \
    EC keySize < 224, 3DES_EDE_CBC, anon, NULL

Con esta configuración y autofirma actual, java ofrece TLS1.2 y funciona correctamente.

En las versiones de Linux actualmente la cadena es la siguiente (Debian y Ubuntu, en otras será similar)

jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
    DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
    include jdk.disabled.namedCurves

Con esta configuración, usando "TLSv1" java no ofrece ninguna opción de conexión. Si añadimos a la lista para desactivar TLSv1.3, entonces ofrece la 1.2 que si funciona. Si eliminamos TLSv1 y TLSv1.1 se comporta igual que Windows y ofrece 1.2

Si cambiamos la configuración propuesta en código java, SSLCONTEXT = "TLSv1.2" entonces ofrece la 1.3 y también funciona correctamente (al menos en las últimas versiones de los navegadores)

Creo que autofirma no debería depender de la configuración global de java.

Resumen: confirmo que el cambio propuesto soluciona, sin configuración adicional de los parámetros de java, el problema de conexión por sockets indicado en aquí y también el de #265

Hago Pull Request