Я работаю над сканером уязвимостей в Java, чтобы проверять веб-сайты, которые разрешают соединения с использованием слабых наборов шифров. Так что я бы, например, попытался подключиться с использованием 56-битного «SSL_DHE_RSA_WITH_DES_CBC_SHA» (или других слабых шифров), и если я получу, скажем, 200 OK, веб-сайт уязвим. Вот где я до сих пор:
1- HttpURLConnection всегда хорошо работает с шифрами по умолчанию, но если я попытаюсь использовать «System.setProperty()» для установки слабого шифра, я либо получу «исключение, не поддерживаемое шифром» (для большинства наборов шифров), либо «соединение отклонено». исключение, когда я пытаюсь подключиться(). Я знаю, что отклонение соединения - это мой ответ веб-сайтам, которые не принимают слабые шифры, но как мне получить фактический заголовок ответа http (с кодом отклонения) вместо исключения?
2. На самом деле меня интересует не поиск уязвимости на уровне SSL (уровень 6), а на уровне HTTP (уровень 7), и я знаю, что в некоторых случаях заголовок http может быть обманчивым, но я согласен с этим.
Таким образом, мне нужно что-то вроде этого, чтобы работать только для Weak Cipher Suites:
URL url = new URL(ip);
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
con.setHostnameVerifier(new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
con.connect();
System.out.println("Response Code : " + con.getResponseCode());