3

이 다소 대답은 내가 사용할 수있는 정보에 나타나지 않을 수 있다는 점에서 투기 질문입니다,하지만 난 충분한 경험을 가진 사람을 기반으로 가능성이 대답을 인식 할 것으로 기대하고있다 기업 프록시의 일반적인 관행에 대해아파치 HttpClient를, 사용자 에이전트, 기업 프록시

저는 (소프트웨어 개발자가 아닌) 회사 프록시에서 일합니다. 여유 시간에 나는 개발중인 Java 프로그램을 사용하고 있었다. 이 프로그램은 몇 가지 매우 간단한 HTTP GET 요청을 만들어야하며 Apache HttpClient를 사용하고 있습니다. 처음에는 프록시 서버를 통해 만들 것인지를 염려했습니다. 우리의 웹 브라우저에서 프록시 서버는 네트워크 설정으로 간단하게 입력됩니다 ... 인증 필요 없음. 그래서 자바 프로그램에 다음을 추가했습니다 :

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

확실히, 효과가있었습니다. 그러나, 나는 또 다른 걱정이 있었다. 내 프로그램에서 오는 HTTP 요청에는 아마도 이상한 User-Agent가 지정되어 있었기 때문에 (나는 이것을 확인했다.) 자동 또는 수동 패킷 검사에서 어떤 종류의 의심도 불러 일으키지 않았 으면 좋겠다. 그래서 나 자신에게 "사용자 에이전트 헤더를이 컴퓨터의 브라우저와 동일하게 설정하지 않는 이유는 무엇입니까?"라고 말했습니다.

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

여기가 이상해집니다. BROWSER_AGENT 문자열이 위의 정확히 내 컴퓨터 (IE 또는 FF 중 하나)에 대한 기업 제공된 브라우저와 같은 값으로 설정되어있는 경우, I는 기업의 프록시 서버에서 반환 형식 오류 메시지 "인증 자격 증명을 누락 실패"얻는다. 그러나 내가 Mozilla 5.0 또는 심지어 완전히 모호한 문자열 또는 심지어 문자열 인 문자열과 같이 일반적인 User-Agent 헤더를 설정하면 잘 작동합니다. 나를 혼란스럽게하는 부분은 다음과 같습니다.

  • User-Agent가 긴 브라우저 문자열 (긴 복잡한 문자열)로 설정되면 어떻게 든 인증에 실패합니다. 실제 브라우저에서는 제공하지 않으므로 의미가 없습니다. 더 인증 정보 (이것은 아마도 몇 가지 사전 설치된 인증서에서 제공하지 않는?) 법인은 포트 80에서 프록시 서버에 전송 된 요청에 대한 인증이 필요한 경우
  • 후 어떻게 임의의 사용자 에이전트 문자열을 통해 얻을 수 있도록 오지? 감시? 내가 이해할 수없는 다른 이유가 있나?

이 질문이 지나치게 건설적인 것으로 간주되지 않기를 바랍니다. 이 분야에서 많은 경험을 가진 사람들의 이야기를 듣고 싶습니다. 감사.

+2

아마도 실제 브라우저를 볼 때 투명 인증을 시도합니다 (예 : ntlm). 모든 소프트웨어가이를 지원하는 것은 아니기 때문에 시스템 관리자가 ntlm을 지원하지 않는 모든 요청을 처리하도록 결정했을 수 있습니다. – kenota

답변

3

기본적으로 HTTPClient는 자신을 사용자 에이전트로 식별합니다. 보시다시피이 문자열을 원하는 문자열로 덮어 쓸 수 있습니다.

프록시 서버가 브라우저 유형에 따라 사용자 자격 증명을 자동으로 추가하도록 구성되어 있지만 예외가 발견되어 관리자가 예외 규칙을 추가 한 것처럼 보입니다. 예를 들어 사용자 에이전트를 알지 못하면 그냥 통과 시키십시오. 개인적으로, 나는 매우 나쁜 보안 정책이라고 생각한다. 알아 내면 모든 프로그램은 가짜 사용자 에이전트를 사용하여 인증없이 프록시를 통과 할 수 있기 때문이다.