2017-11-08 21 views
1

브라우저가 https에서 프로토콜로 HTTP/1을 사용하도록하려면 HTTP/2 사용을 차단하는 데 문제가 있습니다. TLS MITM은 문제가되지 않습니다. NFQUEUE와 같은 usermode 패킷 필터링은 처리 오버 헤드에 따라 최대로 고려 될 수 있습니다.방화벽 수준에서 HTTP/2를 차단하십시오.

ALPN RFC를 읽으면 ALPN이 포함 된 ClientHello가 표시 될 때 경고 응답을 제공하거나 연결을 끊을 지 여부가 명확하지 않습니다. http/2는 ALPN없이 브라우저를 다시 시도합니다.

정확하게 이해하면 ClientHello를 변경하면 해당 패킷에 대한 MAC이 무효화되므로 서버가 ServerHello로 응답 할 때 체크섬 오류가 발생하므로 ClientHello를 수정하는 것이 좋습니다.

차단 된 핸드 셰이크의 동작은 w.r.t.입니다. ALPN은 TLS 버전 대체 (fallback) 처리와 동일합니다 (예 : TLS_FALLBACK_SCSV?

EDIT : openssl의 t1_lib.c에 따라 서버가 ALPN에 대해 알지 못하면이를 무시합니다. 따라서 서버가 ALPN을 포함하는 ClientHello에 대해 Alert를 반환하면 클라이언트가 TLS1.2를 지원하지 않기 때문에 클라이언트에 "경고"이외의 "ALPN없이 다시 시도하십시오"라는 신호를 보낼 수 없습니다 TLS1.1을 시도합니다.

+0

어떤 종류의 방화벽입니까? 이것이 단순한 패킷 필터라면 HTTP/2 차단에 성공하지 못할 것입니다. 그러나 어쨌든 컨텐트를 검사하지 않기 때문에 차단을위한 용도가 없습니다. 이것이 SSL 트래픽을 검사 할 수있는 방화벽 인 경우 man-in-the-middle으로 작동하므로 ALPN 확장을 자동으로 제거하여 HTTP/1.x로 다운 그레이드 할 수 있습니다. 그 외에도 security.stackexchange.com 또는 serverfault.com에서이 주제와 관련된 주제를 다루고 있습니다. –

+0

왜이 작업을 수행 하시겠습니까? 더 나은 대안이있을 수 있습니다. 또한 인바운드 또는 아웃 바운드 연결에 대해 이야기하고 있습니까? –

+0

TLS MITM을 배제하기 위해 질문을 편집했습니다. 이것은 아웃 바운드 방화벽을위한 것입니다. – patraulea

답변

2

TLS를 통한 HTTP/2는 ALPN을 통해 협상됩니다.

브라우저는 서버가이를 지원함을 알립니다.

HTTP/2를 사용하지 않으려면 ALPN을 통해 협상 할 수있는 프로토콜 중 하나로 h2이없는 방식으로 서버 구성을 수정하기 만하면됩니다.

그러면 ALPN 협상은 HTTP/1.1로 되돌아 가고 클라이언트는 HTTP/1.1을 사용합니다.

+0

이 문제를 해결하는 가장 쉬운 방법은 서버 설정이지만 웹 서버를 제어하지는 않습니다. 나는 이것을 명확하게하기 위해 질문을 업데이트했다. 나에게 명확하지 않은 점은 클라이언트에 정책을 적용하거나 TLS MITM을 수행하지 않고 http2 또는 ALPN이 전체적으로 (발신) 방화벽에서 거부 될 수 있는지 여부입니다. – patraulea