Stavo cercando di rimuovere il supporto per SSLv3 da un'app Web in esecuzione su WebSphere 8.5 / Java 7 e in base a più origini (tra le altre, Bollettino sulla sicurezza WebSphere per CVE-2014-3566 ), ho pensato che avrei potuto farlo aggiungendo
jdk.tls.disabledAlgorithms=SSLv3
a jre/lib/security/java.security
.
Tuttavia i test con nmap e altri strumenti hanno mostrato che il protocollo SSLv3 è ancora presente; e so che l'impostazione influisce sul server perché sono riuscito a disabilitare RC4 allo stesso modo.
Ho provato a verificare il comportamento di Oracle JDK con il seguente codice:
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();
}
}
e in esecuzione con entrambe le ultime versioni di JDK 7 e 8, posso vedere che SSLv3 è incluso negli algoritmi disabilitati, e tuttavia anche disponibile. Ad esempio, con JDK 8:
SSLv3, RC4, MD5withRSA, DH keySize < 768
[SSLv3, TLSv1, TLSv1.1, TLSv1.2]
La prima riga è il valore corrente di jdk.tls.disabledAlgorithms
e il secondo i protocolli disponibili.
Quindi mi chiedo che cosa dovrebbe fare questa impostazione; come ho detto so che influisce su altri algoritmi, ma perché SSLv3 è ancora disponibile?
Grazie