Apache HttpClient, User-Agent и корпоративный прокси

Это несколько умозрительный вопрос, поскольку ответ может быть неочевидным в имеющейся у меня информации, но я надеюсь, что кто-то с достаточным опытом распознает вероятный ответ, основанный на общепринятых практиках для корпоративных прокси.

Работаю (не разработчиком ПО) за корпоративным прокси. В свободное время я возился с Java-программой, которую разрабатывал. Эта программа должна сделать несколько очень простых запросов HTTP GET, и я использую для этого Apache HttpClient. Сначала я беспокоился о том, смогу ли я сделать это через прокси-сервер. В наших веб-браузерах прокси-сервер просто вводится в настройки сети... аутентификация не требуется. Итак, я добавил в свою Java-программу следующее:

myClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, MY_PROXY);

Конечно же, это сработало! Однако меня беспокоило другое. В HTTP-запросах, исходящих от моей программы, вероятно, был указан какой-то странный User-Agent (с тех пор я подтвердил, что это так), и я не хотел, чтобы они когда-либо вызывали какие-либо подозрения при автоматической или ручной проверке пакетов. Поэтому я сказал себе: «Почему бы просто не установить заголовок User-Agent таким же, как в браузере на этой машине?»

myClient.getParams().setParameter(CoreProtocolPNames.USER_AGENT, BROWSER_AGENT);

Вот где это становится странным. Если приведенная выше строка BROWSER_AGENT имеет точное значение, равное корпоративному браузеру на моем компьютере (IE или FF), я получаю сообщение об ошибке типа "аутентификация не удалась, отсутствуют учетные данные", возвращаемое из корпоративный прокси-сервер. Но если я установлю для заголовка User-Agent что-то общее, например, Mozilla 5.0, или даже полностью фиктивную строку, или даже пустую строку, все будет работать нормально! Части, которые меня смущают:

  • Когда User-Agent настроен на то же, что и мой браузер (длинная сложная строка), я каким-то образом «проваливаю аутентификацию», что не имеет смысла, поскольку в реальном браузере я не предоставляю информацию для аутентификации (если только она не исходит из какого-то предварительно установленного сертификата может быть?)
  • Если корпорация требует аутентификации для любых запросов, отправляемых на прокси-сервер через порт 80, то почему они пропускают случайные строки User-Agent? Надзор? Какая-то другая причина, которую я не могу понять?

Надеюсь, этот вопрос не слишком умозрительный, чтобы считать его конструктивным. Хотелось бы услышать мнение людей с опытом в этой области. Спасибо.


person Dave Johnson    schedule 01.12.2012    source источник
comment
Возможно, когда он видит какой-то реальный браузер, он пытается использовать прозрачную аутентификацию, например ntlm. И поскольку не все программы его поддерживают, возможно, ваши системные администраторы решили пропустить все запросы, которые не поддерживают ntlm.   -  person kenota    schedule 02.12.2012


Ответы (1)


По умолчанию HTTPClient идентифицирует себя как пользовательский агент. Как вы видели, вы можете переопределить это на любую строку, которую хотите.

Похоже, ваши прокси-серверы настроены на автоматическое добавление учетных данных пользователя в зависимости от типа браузера, однако из-за найденного исключения ваш администратор добавил правило исключения, то есть, когда пользовательский агент неизвестен, просто пропустите его. Лично я думаю, что это очень плохая политика безопасности, поскольку, как вы узнали, все программы могут проходить через ваш прокси без аутентификации, просто используя поддельный пользовательский агент.

person donramos    schedule 03.12.2012