Java HttpURLConnection подключается с использованием слабых шифров

Я работаю над сканером уязвимостей в 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());

person sys147    schedule 23.02.2011    source источник


Ответы (1)


как получить фактический заголовок ответа http (с кодом отклонения) вместо исключения?

Вы не знаете. Соединение SSL не формируется, поэтому заголовки HTTP не должны передаваться. То, что вы получаете, это SSLException.

На самом деле меня интересует не поиск уязвимости на уровне SSL (уровень 6), а на уровне HTTP.

Это утверждение не имеет никакого смысла. Уязвимость существует на уровне SSL. Не существует соединения на уровне HTTP(s) до тех пор, пока соединение SSL не будет завершено, и вместо этого произойдет сбой.

person user207421    schedule 24.02.2011
comment
EJP... спасибо за комментарии. Я думаю, вы упустили мою мысль. Уязвимость SSL существует на уровне SSL... Однако... есть случаи (и я видел их много), когда она компенсируется на уровне приложений. Так, например, если вы запустите сканер уязвимостей (такой как Nussus). Он вернется и сообщит, что сайт уязвим из-за слабых шифров (после попадания на уровень SSL) ... НО ... когда вы попытаетесь подключиться к нему (скажем, через браузер с включенными только наборами слабых шифров) вы получите ответ, такой как ошибка HTTP 403.5 - Запрещено: для просмотра этого ресурса требуется SSL 128. - person sys147; 24.02.2011
comment
.. Кроме того, успешное согласование соединения SSL не гарантирует, что соединение будет успешным в целом. - person sys147; 24.02.2011
comment
@ sys146: Итак, вам нужно посмотреть код ответа и его текст. Я предлагаю вам добавить всю недостающую информацию к вашему вопросу. - person user207421; 25.02.2011
comment
.. Ну, я знаю, что ответ будет в коде ответа. Мой вопрос просто в том, как я могу попытаться подключиться к веб-сайту с помощью HttpsURLConnection со слабыми шифрами, такими как SSL_DHE_RSA_WITH_DES_CBC_SHA. Я не вижу никакого метода в классе HttpsURLConnection, где я могу выбрать тип шифра, который я хочу использовать для подключения. - person sys147; 25.02.2011
comment
Вы устанавливаете системное свойство. Получаете ли вы исключение или код ответа, зависит от того, как построен другой конец. Если этот набор шифров не включен, вы получаете исключение рукопожатия. Если приложение имеет проверку стойкости шифра после рукопожатия, оно может делать все, что захочет, включая HTTP 403. Вы ничего не можете сделать с этим со стороны клиента. - person user207421; 27.02.2011