SNI 대 ALPN: Wireshark PCAP의 TLS 핸드셰이크 분석 및 HTTP/2 협상

TLS 핸드셰이크에서 SNI와 ALPN을 분석합니다. HTTP/2 협상 실패, h2와 http/1.1 폴백, ClientHello 확장, ServerHello ALPN 응답 및 Wireshark PCAP의 프록시 종료 문제를 진단합니다.

TLS 알펜, http2 negotiation, clienthello, serverhello, h2, http/1.1 fallback, PCAP 분석

많은 "HTTP/2 작동하지 않음" 사고는 실제로 TLS ALPN 협상 문제입니다. 엔드포인트가 HTTP/2를 지원해야 하지만 트래픽이 대체되는 경우 사용자는 "TLS ALPN pcap", "HTTP2 HTTP/1.1로 대체", "ALPN h2 협상되지 않음", "ClientHello ALPN 확장", "ServerHello가 선택한 프로토콜" 및 "내 브라우저가 HTTP/1.1을 사용하는 이유"를 검색합니다.

ALPN 증거가 TLS 핸드셰이크에 있기 때문에 PCAP 수술은 유용합니다. 캡처에 ClientHello 및 ServerHello가 포함된 경우 클라이언트가 h2를 제공했는지, 서버가 이를 선택했는지, 프록시가 TLS를 종료했는지, 연결이 HTTP/2를 협상할 기회가 없었는지 여부를 종종 증명할 수 있습니다.

ALPN이 하는 일

ALPN은 애플리케이션 계층 프로토콜 협상을 의미합니다. 이를 통해 클라이언트와 서버는 TLS 설정 중에 애플리케이션 프로토콜에 동의할 수 있습니다.

일반적인 ALPN 값:

  • TLS를 통한 HTTP/2의 경우 'h2'입니다.
  • HTTP/1.1의 경우 'http/1.1'입니다.
  • 특수 시스템을 위한 기타 프로토콜 식별자입니다.

클라이언트가 'h2'를 제공하지 않으면 서버는 이를 선택할 수 없습니다. 서버가 h2를 선택하지 않으면 서버가 다른 곳에서 HTTP/2를 지원하더라도 연결은 HTTP/2를 사용하지 않습니다.

일반적인 증상

ALPN 실패는 다음과 같이 나타납니다.

  • 브라우저는 HTTP/2 대신 HTTP/1.1을 사용합니다.
  • gRPC 연결이 실패합니다.
  • CDN은 작동하지만 원본은 작동하지 않습니다.
  • 역방향 프록시는 프로토콜을 다운그레이드합니다.
  • 로드 밸런서는 TLS를 종료하고 HTTP/1.1을 전달합니다.
  • 모바일 앱에 프로토콜 오류가 표시됩니다.
  • 서버 측정항목에 h2 트래픽이 표시되지 않습니다.
  • HTTP/2는 하나의 호스트 이름에서는 작동하지만 다른 호스트 이름에서는 작동하지 않습니다.

이러한 증상은 종종 HTTP 계층에서 디버깅되지만 대답은 TLS 협상에 있을 수 있습니다.

ClientHello 증거

ClientHello는 클라이언트가 ALPN을 제공했는지 여부와 어떤 프로토콜을 광고했는지 표시할 수 있습니다.

유용한 질문:

  • ALPN 확장이 있습니까?
  • 제안에 'h2'가 포함되어 있나요?
  • http/1.1도 포함되어 있나요?
  • SNI가 존재하고 정확합니까?
  • 어떤 TLS 버전이 제공되나요?
  • 프록시가 TLS를 종료하기 전에 캡처가 수행됩니까?

ClientHello에 h2가 없으면 서버는 HTTP/2를 선택할 수 없습니다. 그 이유는 클라이언트 라이브러리 구성, 이전 TLS 스택, 비활성화된 HTTP/2 옵션 또는 새 업스트림 연결을 여는 프록시 클라이언트일 수 있습니다.

ServerHello 증거

서버 측은 클라이언트의 ALPN 목록에서 하나의 프로토콜을 선택해야 합니다.

문제:

  • 서버는 'http/1.1'만 선택합니다.
  • 서버가 ALPN 응답을 생략합니다.
  • ALPN 선택 전에 서버 핸드셰이크가 실패합니다.
  • 인증서 또는 SNI 불일치가 기본 가상 호스트로 라우팅됩니다.
  • TLS 종결자는 공개 측에서는 h2를 지원하지만 업스트림 측에서는 지원하지 않습니다.

패킷 증거는 서버 지원을 라우팅 및 프록시 동작과 분리할 수 있습니다.

SNI와 ALPN을 함께 사용

SNI와 ALPN은 종종 연결됩니다. SNI가 선택한 호스트 이름에 따라 적용되는 인증서, 가상 호스트 및 프로토콜 설정이 결정될 수 있습니다.

실패 예시:

  • 클라이언트는 'h2'를 제안합니다.
  • 클라이언트가 잘못된 SNI를 보냅니다.
  • 서버가 기본 인증서를 반환합니다.
  • 기본 가상 호스트는 HTTP/2를 활성화하지 않습니다.
  • 연결은 'http/1.1'로 돌아갑니다.

이 경우 문제는 "HTTP/2가 전역적으로 끊어짐"이 아닙니다. 호스트 이름 라우팅입니다.

프록시 및 로드 밸런서 종료

최신 배포에서는 TLS를 분할하는 경우가 많습니다.

client -> CDN or load balancer -> reverse proxy -> origin

gRPC and ALPN

For gRPC troubleshooting, preserve:

Fallback is not always failure

Debug checklist

Use this workflow:

Final diagnosis

<!-- pcap-localized-evidence-foundation-v1:start -->

“SNI 대 ALPN: Wireshark PCAP의 TLS 핸드셰이크 분석 및 HTTP/2 협상”을 packet evidence로 답하기

direct answer는 analyzer label이나 application message만으로 원인을 정할 수 없다는 것입니다. capture point와 flow direction에서 시작해 마지막 성공 protocol boundary와 첫 실패 boundary를 증명합니다. 다른 reviewer가 근거 packet, gap, interval을 찾고 어떤 evidence가 결론을 반박할 수 있는지 알아야 합니다.

path 위에 capture 배치

client, server, proxy, load balancer, NAT, firewall을 기록합니다. interface, 위치, clock, OS, 관찰 방향을 명시합니다. client capture는 client에 도착한 것을 증명하지만 server가 보내지 않았음을 증명하지 않습니다. server capture도 해당 지점의 출구만 증명합니다. 두 지점 비교 전에 clock offset을 보정하고 flow tuple, TCP sequence, transaction ID를 맞춥니다.

snap length, dropped packets, offload, capture filter, ring buffer, 시작 시각을 확인합니다. host의 bad checksum은 offload artifact일 수 있습니다. 큰 segment는 GRO/TSO 결과이며 wire의 한 packet이 아닐 수 있습니다. 제한된 file에 packet이 없다는 이유만으로 network loss라고 하지 않습니다.

boundary를 순서대로 읽기

경계 성공 evidence 유효한 실패 evidence
Link/IP direction, address, route 일치 ARP/NDP 부재, ICMP, MTU, asymmetry
TCP SYN, SYN-ACK, ACK, sequence retransmission, RST, zero window, timeout
TLS ClientHello, ServerHello, 진행 alert, SNI/ALPN/certificate 경계
Application 완전한 request와 연결된 response status, gap, 조기 close
User response time 또는 failure window 증명된 경계의 stall

성공 evidence가 없는 첫 경계에서 멈춥니다. TCP가 완성되지 않았다면 HTTP부터 해석하지 않습니다. request가 proxy에 도착하고 upstream에 없다면 proxy나 그 경로가 경계입니다. upstream에 도착했지만 timeout 전에 response가 없다면 ACK와 byte progress로 application delay와 network loss를 나눕니다.

observation과 hypothesis 분리

observation은 packet에서 찾을 수 있어야 합니다. “client가 특정 sequence까지 전송했고 sender가 같은 segment를 세 번 반복했으며 이 지점에서 진행하는 ACK가 보이지 않는다.” hypothesis는 “path가 segment를 잃었다”입니다. 다른 capture point나 dropped records가 반박할 수 있습니다. 각 hypothesis에 지지 evidence와 반증 evidence를 씁니다.

retransmission과 duplicate ACK는 책임자를 정하지 않습니다. reordering, loss, capture artifact, receiver delay가 비슷한 label을 만듭니다. direction, sequence, ACK, SACK, RTT, window, application timing을 연결합니다. DNS/DHCP는 transaction ID와 attempts, HTTP는 request/response, TLS는 handshake direction을 맞춥니다.

편집 전에 original 보존

original checksum을 계산하고 변경하지 않습니다. filter, trim, redaction은 working copy에서 수행합니다. input, operation, 시각, 전후 packet count, output checksum, 이유를 기록합니다. timestamp rewrite나 packet 삭제 뒤 copy는 일부 timing 또는 sequence 결론에 사용할 수 없습니다.

address와 identifier는 동일한 alias로 바꿔 endpoint를 추적합니다. 판단에 필요한 port, direction, length는 삭제하지 않습니다. secret mapping은 분리합니다. capture와 export 범위PCAP Surgery 개요로 파생 file을 검토합니다.

공개 전 QA

title과 answer가 같은 flow를 다루는가? duration이 clock과 지점을 적는가? 첫 failure boundary가 명확한가? alternative explanation이 있는가? 한 변수로 재시험 가능한가? original이 남는가? 결론 범위를 씁니다. “이 file은 지정 interval의 client 쪽 behavior를 증명하지만 server 내부 execution은 증명하지 않는다.”

검증된 Semrush 일반어 PCAP analyzer제품 페이지만 owner입니다. 이 기술 글에 측정하지 않은 volume이나 KD를 만들지 않습니다.

<!-- pcap-localized-evidence-foundation-v1:end --><!-- multilingual-blog-closeout:start -->

직접 답변과 인수 경계

“SNI 대 ALPN: Wireshark PCAP의 TLS 핸드셰이크 분석 및 HTTP/2 협상”에 대한 짧은 답은 다음과 같습니다. TLS 핸드셰이크에서 SNI와 ALPN을 분석합니다. HTTP/2 협상 실패, h2와 http/1.1 폴백, ClientHello 확장, ServerHello ALPN 응답 및 Wireshark PCAP의 프록시 종료 문제를 진단합니다. 이 문장을 모든 입력, 장치, 프로젝트, 환경에 대한 약속이 아니라 검증할 결과로 다루십시오. 완료된 결과에는 시작 상태, 정확한 작업, 보이는 출력, PCAP Surgery에서 작업이 끝났음을 증명하는 조건이 기록됩니다.

근거 우선 작업 절차

전체 프로젝트를 바꾸기 전에 작고 반복 가능한 사례에서 시작하십시오. 앱 버전, 운영체제, 입력 또는 장치 식별, 관련 설정과 예상 결과를 기록합니다. 한 가지 의도적인 작업을 실행하고 첫 예상 밖 전환을 보존하며 가능한 경우 정상 사례와 비교합니다. 여러 설정을 동시에 바꾸면 문제를 만든 조건이나 해결한 조건을 알 수 없습니다.

확인점 1: SNI 대 ALPN: Wireshark PCAP의 TLS 핸드셰이크 분석 및 HTTP/2 협상

“SNI 대 ALPN: Wireshark PCAP의 TLS 핸드셰이크 분석 및 HTTP/2 협상”을 다른 담당자가 반복할 수 있는 통과 또는 실패 문장으로 만듭니다. 있어야 하는 것, 없어야 하는 것, 실패 시 안전한 복구를 포함합니다. 수정한 복사본이 같은 검사를 통과할 때까지 원본 프로젝트나 캡처를 유지합니다.

확인점 2: TLS 핸드셰이크에서 SNI와 ALPN을 분석합니다. HTTP/2 협상 실패, h2와 http/1.1 폴백, ClientHello 확장, ServerHello A

“TLS 핸드셰이크에서 SNI와 ALPN을 분석합니다. HTTP/2 협상 실패, h2와 http/1.1 폴백, ClientHello 확장, ServerHello ALPN 응답 및 Wireshark PCAP의 프록시 종료 문제를 진단합니다.”을 “SNI 대 ALPN: Wireshark PCAP의 TLS 핸드셰이크 분석 및 HTTP/2 협상”의 독립된 인수 기준으로 다루십시오. 작업 전 상태, 처음 보인 변화, 최종 상태를 기록합니다. 결과가 설명된 목표와 다르면 추측으로 계속하지 말고 마지막으로 확인한 지점으로 돌아갑니다.

확인점 3: ALPN이 하는 일

“ALPN이 하는 일”을 다른 담당자가 반복할 수 있는 통과 또는 실패 문장으로 만듭니다. 있어야 하는 것, 없어야 하는 것, 실패 시 안전한 복구를 포함합니다. 수정한 복사본이 같은 검사를 통과할 때까지 원본 프로젝트나 캡처를 유지합니다.

확인점 4: 일반적인 증상

“일반적인 증상”을 “SNI 대 ALPN: Wireshark PCAP의 TLS 핸드셰이크 분석 및 HTTP/2 협상”의 독립된 인수 기준으로 다루십시오. 작업 전 상태, 처음 보인 변화, 최종 상태를 기록합니다. 결과가 설명된 목표와 다르면 추측으로 계속하지 말고 마지막으로 확인한 지점으로 돌아갑니다.

확인점 5: ClientHello 증거

“ClientHello 증거”을 다른 담당자가 반복할 수 있는 통과 또는 실패 문장으로 만듭니다. 있어야 하는 것, 없어야 하는 것, 실패 시 안전한 복구를 포함합니다. 수정한 복사본이 같은 검사를 통과할 때까지 원본 프로젝트나 캡처를 유지합니다.

확인점 6: ServerHello 증거

“ServerHello 증거”을 “SNI 대 ALPN: Wireshark PCAP의 TLS 핸드셰이크 분석 및 HTTP/2 협상”의 독립된 인수 기준으로 다루십시오. 작업 전 상태, 처음 보인 변화, 최종 상태를 기록합니다. 결과가 설명된 목표와 다르면 추측으로 계속하지 말고 마지막으로 확인한 지점으로 돌아갑니다.

확인점 7: SNI와 ALPN을 함께 사용

“SNI와 ALPN을 함께 사용”을 다른 담당자가 반복할 수 있는 통과 또는 실패 문장으로 만듭니다. 있어야 하는 것, 없어야 하는 것, 실패 시 안전한 복구를 포함합니다. 수정한 복사본이 같은 검사를 통과할 때까지 원본 프로젝트나 캡처를 유지합니다.

확인점 8: 프록시 및 로드 밸런서 종료

“프록시 및 로드 밸런서 종료”을 “SNI 대 ALPN: Wireshark PCAP의 TLS 핸드셰이크 분석 및 HTTP/2 협상”의 독립된 인수 기준으로 다루십시오. 작업 전 상태, 처음 보인 변화, 최종 상태를 기록합니다. 결과가 설명된 목표와 다르면 추측으로 계속하지 말고 마지막으로 확인한 지점으로 돌아갑니다.

확인점 9: gRPC and ALPN

“gRPC and ALPN”을 다른 담당자가 반복할 수 있는 통과 또는 실패 문장으로 만듭니다. 있어야 하는 것, 없어야 하는 것, 실패 시 안전한 복구를 포함합니다. 수정한 복사본이 같은 검사를 통과할 때까지 원본 프로젝트나 캡처를 유지합니다.

확인점 10: Fallback is not always failure

“Fallback is not always failure”을 “SNI 대 ALPN: Wireshark PCAP의 TLS 핸드셰이크 분석 및 HTTP/2 협상”의 독립된 인수 기준으로 다루십시오. 작업 전 상태, 처음 보인 변화, 최종 상태를 기록합니다. 결과가 설명된 목표와 다르면 추측으로 계속하지 말고 마지막으로 확인한 지점으로 돌아갑니다.

인수 매트릭스

확인점 보존할 근거 통과 조건
SNI 대 ALPN: Wireshark PCAP의 TLS 핸드셰이크 분석 및 HTTP/2 협상 시작 상태, 한 작업, 결과 상태 두 번째 담당자가 같은 결과를 재현한다
TLS 핸드셰이크에서 SNI와 ALPN을 분석합니다. HTTP/2 협상 실패, h2와 http/1.1 폴백, ClientHello 확장, ServerHello ALPN 응답 및 Wireshark PCAP의 프록시 종 시작 상태, 한 작업, 결과 상태 두 번째 담당자가 같은 결과를 재현한다
ALPN이 하는 일 시작 상태, 한 작업, 결과 상태 두 번째 담당자가 같은 결과를 재현한다
일반적인 증상 시작 상태, 한 작업, 결과 상태 두 번째 담당자가 같은 결과를 재현한다
ClientHello 증거 시작 상태, 한 작업, 결과 상태 두 번째 담당자가 같은 결과를 재현한다
ServerHello 증거 시작 상태, 한 작업, 결과 상태 두 번째 담당자가 같은 결과를 재현한다

실패 분리, 복구, 인계

처음 실패한 경계에서 멈추십시오. 소스, 프로젝트, 세션 또는 캡처를 보존하고 파괴적 편집 전에 복사하며 실험마다 한 변수만 변경합니다. 여러 변경 뒤 전체 흐름을 반복해 결과가 달라져도 원인은 설명되지 않습니다.

근거가 없는 것과 없다는 근거를 구분하십시오. 빈 화면은 잘못된 입력, 범위, 필터, 권한, 장치, 시간대 또는 프로젝트 상태일 수 있습니다. decoder, 편집기, 보고서, 내보내기를 해석하기 전에 획득 또는 가져오기 경로를 확인합니다.

인계 전에 결과물을 다시 열어 시작, 판단 지점, 끝을 확인합니다. 버전, 플랫폼, 설정, 기대, 관찰, 최소 재현을 기록합니다. 민감한 내용을 제거하거나 가리고 수신자의 권한을 확인합니다.

질문과 답변

가장 빠르고 신뢰할 수 있는 시작 방법은 무엇입니까?

가장 작고 대표적인 사례를 사용하고 예상 결과를 적은 뒤 한 변수만 바꿉니다. 필터, 효과, 편집, 자동화 또는 큰 소스를 추가하기 전에 기본 경로를 확인합니다.

어떤 근거를 저장해야 합니까?

입력 식별, 버전, 플랫폼, 설정, 정확한 작업, 첫 예상 밖 전환, 최종 출력을 보존합니다. 프로젝트, 세션, 보고서 또는 내보내기는 닫고 다시 열어 확인합니다.

언제 절차를 반복해야 합니까?

앱, 운영체제, driver, firmware, 모델, 소스 또는 작업 흐름의 변경이 결과에 영향을 줄 수 있을 때입니다. 이전에 통과한 사례를 변경하지 않은 기준선으로 유지합니다.

언제 인계할 수 있습니까?

권한 있는 다른 사람이 입력을 식별하고 작업을 반복하여 같은 결과를 보고 남은 제한을 이해하며 기록되지 않은 로컬 상태 없이 결과물을 열 수 있을 때입니다.

관련 가이드

다음 동일 언어 페이지는 이 주제의 정규 소유자를 바꾸지 않고 인접 단계를 설명합니다.

<!-- multilingual-blog-closeout:end -->