Estaba intentando eliminar el soporte para SSLv3 de una aplicación web que se ejecuta en WebSphere 8.5 / Java 7, y de acuerdo con varias fuentes (entre otras, Boletín de seguridad de WebSphere para CVE-2014-3566 ), pensé que podría hacerlo agregando
jdk.tls.disabledAlgorithms=SSLv3
a jre/lib/security/java.security
.
Sin embargo, las pruebas con nmap y otras herramientas mostraron que el protocolo SSLv3 todavía está presente; y sé que la configuración afecta al servidor porque logré desactivar RC4 de la misma manera.
Intenté verificar el comportamiento de Oracle JDK con el siguiente código:
import javax.net.ssl.SSLContext;
import java.security.*;
import java.util.*;
public class Main {
public static void main(String[] args) {
System.out.println(Security.getProperty("jdk.tls.disabledAlgorithms"));
List<String> protocols = new ArrayList<>();
for (Provider provider : Security.getProviders()) {
for (Object prop : provider.keySet()) {
String key = (String) prop;
if (key.startsWith("SSLContext.")
&& !key.equals("SSLContext.Default")
&& key.matches(".*[0-9].*"))
protocols.add(key.substring("SSLContext.".length()));
else if (key.startsWith("Alg.Alias.SSLContext.")
&& key.matches(".*[0-9].*"))
protocols.add(key.substring("Alg.Alias.SSLContext.".length()));
}
}
Collections.sort(protocols);
System.out.println(protocols);
SecureRandom rand = new SecureRandom();
}
}
y ejecutándose con las últimas versiones de JDK 7 y 8, puedo ver que SSLv3 está incluido en los algoritmos deshabilitados y, sin embargo, también está disponible. Por ejemplo, con JDK 8:
SSLv3, RC4, MD5withRSA, DH keySize < 768
[SSLv3, TLSv1, TLSv1.1, TLSv1.2]
La primera línea es el valor actual de jdk.tls.disabledAlgorithms
, y la segunda, los protocolos disponibles.
Así que me pregunto qué se supone que debe hacer esa configuración; Como dije, sé que afecta a otros algoritmos, pero ¿por qué se informa que SSLv3 aún está disponible?
Gracias