단일 포트를 통해 암호화 및 암호화되지 않은 http 연결을 처리하는 방법


10

다음 다이어그램을보십시오.

대체 텍스트

이것은 어떻게 작동합니까?

  • 원격에서 http : // myhost.com:8080/*를 요청하면 루프백 인터페이스의 포트 8008에서 수신 대기하는 http 서버로 요청을 전달해야합니다. 이것은 쉬운 부분입니다.

  • 원격 사용자가 http://myhost.com:8080/specialurl ...을 요청할 때

    • 응용 프로그램 수준 게이트웨이로 작동하는 프로그램 (암호화 된 세션에 대한 연결 업그레이드 할 수 있어야합니다 포트를 변경하지 않고를 )

    • 원격 브라우저와 암호화 된 세션을 설정 한 후 루프백 인터페이스의 포트 8000에서 수신 대기하는 C 프로그램으로 요청을 전달해야합니다.

내 질문은 :

  1. 프로덕션 환경에서 이와 같은 솔루션을 배포 한 적이 있습니까? 당신이 가지고 있다면...
  2. 응용 프로그램 게이트웨이로 사용하기 위해 어떤 제품을 사용 했습니까?
  3. 구성 예를 제공 할 수 있습니까?

엄격한 제한 사항 :

  • 내가 방화벽을 통해 제어 할 수 없습니다 , 나는 내부 서버에 외부 트래픽을 얻을 수있는 유일한 포트 포트 번호는 무관하다 8080입니다, 문제는 방화벽 수준에 하나의 포트 개방이 있다는 것을 전달 수신 내부 서버로의 트래픽.
  • 내부 서버는 Linux를 실행 중이어야합니다 (현재 Debian Lenny를 실행 중임)
  • 원격 사용자는이 서버에 액세스하기 위해 현재 웹 브라우저와 인터넷 연결 만 있으면됩니다. 이것은 여기서 SSH를 통한 역방향 포트 전달이 옵션이 아님을 의미합니다.
  • 프로덕션 환경에서 테스트되었으며 쉽게 배포 할 수있는 제품이 필요합니다. 내 자신의 응용 프로그램 게이트웨이를 개발하지 않으려 고합니다 (이 경우 서버 결함에서 묻는 대신 스택 오버플로 에서이 질문을하는 것 같습니다).

소프트 제한 :

  • Apache를 응용 프로그램 게이트웨이로 사용하지 않으려 고합니다 (유일한 선택 일 경우 기꺼이 할 수는 있지만)
  • 가능하면 응용 프로그램 게이트웨이는 성숙한 오픈 소스 소프트웨어 제품이어야합니다.

응용 프로그램 게이트웨이까지 성공한 제품

  • 니 진스
  • lighttpd
  • 파운드

관련 RFC

  • RFC2817 (... 기존 TCP 연결을 통해 TLS (Transport Layer Security)를 시작하기 위해 HTTP / 1.1의 업그레이드 메커니즘을 사용하는 방법에 대해 설명합니다. 보안되지 않은 보안 HTTP 트래픽이 동일한 잘 알려진 포트를 공유 할 수 있도록합니다 ...)
  • RFC2818 (... ... 은 인터넷을 통해 TLS를 사용하여 HTTP 연결을 보호하는 방법을 설명합니다. 현재 관행은 다른 서버 포트를 사용하여 보안 트래픽을 안전하지 않은 트래픽과 구분하여 SSL을 통한 HTTP (TLS의 이전 버전)를 계층화하는 것입니다 ... )

"원격 사용자가 http : // myhost.com:8080/specialurl ...을 요청하면 ... 응용 프로그램 수준 게이트웨이 역할을하는 프로그램은 포트를 변경하지 않고 암호화 된 세션으로 연결을 업그레이드 할 수 있어야합니다."... 어떻게 클라이언트 쪽에서 가능합니까? 클라이언트 브라우저가 https가없는 URL을 통해 SSL 실행을 지원합니까?
Adam Brand

아담 안녕하세요, 의견을 남겨 주셔서 감사합니다. myhost.com:8080/specialurl을 요청한 후 브라우저는 myhost.com:8080/specialurl 로 리디렉션되어야합니다 . 다른 브라우저는 확실하지 않지만 최신 버전의 Opera 및 Firefox는 문제없이이를 지원하는 것으로 보입니다.
alemartini

답변:


1

그들 모두를 지배하는 하나의 포트 는 누군가가 자바 세계에서 그것을 구현했다고 보여줍니다.

프로덕션 환경에서 이러한 솔루션을 배포 한 적이 있습니까?

나는 그것을하지도 않았고 그것을 추천하지도 않았다. 컨설턴트로서 저는 고객이 표준화되고 입증 된 기술을 사용하도록 권장합니다. 엣지 케이스를 제외하고는 RFC를 제대로 구현하는 시스템이 없으며, 이것이 내가 제안하거나 지원하려는 것이 아닙니다.


안녕 Stan, 의견을 보내주십시오. 나는 그리즐리를 알지 못했고 불행히도 나는 Java에 익숙하지 않다. 프로덕션 환경에서 이러한 솔루션을 배포 한 적이 있습니까? 방법을 보여주는 예제를 공유 할 수 있다면 좋을 것입니다. 다시 한 번 감사합니다, 알렉스
alemartini

답을 수정하고 정보를 추가해 주셔서 감사합니다. 보시다시피, 이제 성숙한 제품을 찾고 있다고 더 명확하게 진술하면서 내 질문을 좁혔습니다. 누군가 이것에 대한 좋은 대답을하는지 보자. 아파치는 리눅스 세계에서 RFC2817을 지원하는 유일한 애플리케이션이라고 믿기 어렵다. 그러나 그 경우이거나 다른 제품으로 이와 같은 것을 배포 한 실제 경험이있는 사람이 없다면 Apache 로이 문제를 해결하려고 시도하는 것 외에는 선택의 여지가 없다고 생각합니다.
alemartini

0

아파치는 여기서 당신을 도와주지 않을 것입니다. 주어진 포트에서 HTTP 또는 HTTPS 연결 만 수신 할 수 있습니다.

내가 아는 한,이 기능을 구현하는 "성숙한 제품"은 없습니다. 네트워크 관리자에게 방화벽에 다른 구멍을 뚫어 주거나 ​​여러 수신 포트를 설정할 수있는 외부 엔드 포인트에 VPN 또는 SSH 터널을 설정하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.