Oracle acaba de publicar una nueva
versión mayor de su lenguaje y entorno de ejecución Java. Esta versión trae nuevas características interesantes
desde el punto de vista de la programación como la adición de las tan esperadas
expresiones lambda. Vamos a repasar las mejoras
de seguridad que se han añadido o mejorado en esta nueva versión.
Por defecto, los clientes Java
que sean programados con JSSE (Java Secure Socket Extension) dispondrán de las versiones TLS 1.1 y 1.2.
Se ha añadido un nuevo método
"doPrivilege", de la clase "AccessController", para que se
puedan evaluar un subconjunto del total de privilegios de un proceso. Esto va a
permitir que si un proceso necesita consultar si tiene permisos para cierta
acción, este pueda buscar, entre la jerarquía de invocaciones, si tiene ese
permiso concedido y parará la búsqueda en el momento en que encuentre una invocación
que le dota de ese privilegio concreto.
Se han añadido nuevos algoritmos para cifrados basados en
contraseña. PBEWithSHA256AndAES_128 y PBEWithSHA512AndAES_256. Anteriormente
se estaban usando combinaciones débiles de algoritmos de cifrado (RC4, RC2) con
claves de longitud muy cortas (40 bits).
Se ha habilitado la extensión SNI
(Server Name Indication), parte de TLS. Esta opción permite al cliente conocer
a que nombre de host se está conectando cuando comienza el handshake. En la
práctica, esto permite a un servidor con
una sola IP publicar varios sitios webs con dominios y certificados digitales
diferentes. Ahora pueden programarse clientes Java que soporten dicha
funcionalidad.
Ahora se soportarán los cifrados AEAD (Authenticated Encryption with Associated
Data) y GCM (Galois Counter Mode) en el proveedor de criptografía de Java,
SunJCE. Esto está incluido, básicamente, por ser requerimiento por el gobierno
estadounidense en materia seguridad para aplicaciones construidas por terceros.
Se ha añadido una nueva opción
"--importpassword" en el
gestor de llaves de Java para permitir
almacenar contraseñas de manera segura.
Se ha añadido la función hash SHA-224, parte de la familia SHA2.
Se ha mejorado el soporte para la suite B criptográfica de la NSA. Básicamente por la misma razón comercial que el soporte AEAD.
Se ha mejorado la generación de números pseudoaleatorios para
permitir la generación de números con un alto valor entrópico en caso de ser necesarios.
Se ha añadido una nueva clase,
PKIXRevocationChecker, para comprobar la
revocación de certificados seguros.
Para la plataforma Java en
Windows 64 bits, se añade el soporte
para PKCS11. Una familia de estándares necesarios para implementar infraestructura
de clave pública. Por ejemplo, el DNI electrónico.
Se mejorado sustancialmente el soporte a Kerberos empleando nuevos tipos
de rcache, se ha eliminado el soporte a cifrados débiles, nuevos protocolos y
otras mejoras.
Los servidores SASL creados
permiten tener un nombre nulo para posibilitar a los clientes designar
cualquier nombre de servidor antes de la negociación y obtener posteriormente
uno concreto en forma de propiedad.
Se ha mejorado el soporte JNI en los sistemas Mac OSX.
Se mejora el soporte para claves
efímeras más robustas en el algoritmo de intercambio de llaves Diffie-Hellman.
Ahora es posible indicar una suite criptográfica por defecto y preferente
por el servidor Java usando el método 'setUseCipherSuitesOrder'
de la clase 'SSLParameters'. Hasta
ahora simplemente se usaba aquella que fuera preferencia del cliente.
Más información
JDK 8 Security Enhancements
David García
Twitter: @dgn1729

Mejoras de seguridad en java? Bien, pero... y el problema de seguridad que supone la aparición de una nueva versión mayor? Y la migración de versiones viejas del JRE? El remedio puede ser mucho peor que la enfermedad.
ResponderEliminar