2014-05-19 2 views
11

원격 웹 사이트가 SPDY를 지원하는지 그리고 어떤 버전인지를 감지하는 방법은 무엇입니까?서버가 SPDY를 사용하고 있는지 감지하는 방법

내가 명령 줄에서 bash 스크립트처럼 사용할 수있는 것.

curl을 사용하여 사용자 정의 사용자 에이전트 헤더를 보내려고했지만 나에게 도움이되는 응답 헤더를 얻을 수 없습니다.

아이디어는 SPDY : true/false 버전 : 3.1/3.0 ... 모든 도메인에서 사용할 수 있습니다.

+0

이 작업을 수행하는 프로그램을 작성 하시겠습니까? 아니면이 프로그램을 작성 하시겠습니까? –

+0

내가 bash 스크립트에서 사용할 수있는 준비가되어 있기를 바랬습니다. – Jim

답변

18
openssl s_client -connect google.com:443 -nextprotoneg '' 
CONNECTED(00000003) 
Protocols advertised by server: spdy/3.1, spdy/3, http/1.1 
+7

openssl 0.9.8을 사용하는 경우이 명령이 작동하지 않습니다. Mac을 사용하는 경우 openssl을 brew로 업데이트 할 수 있습니다. http://apple.stackexchange.com/a/126832/78754 – jdorfman

7

SPDY 프로토콜 협상은 초기 TLS 핸드 셰이크 중에 발생합니다.

현재 프로토콜을 협상하는 두 가지 방법이 있습니다. 이전 프로토콜은 NPN (http://tools.ietf.org/html/draft-agl-tls-nextprotoneg-04)입니다. ClientHello TLS 메시지에서 클라이언트는 ID가 0x3374 인 NPN 확장을 보냅니다. 서버는 NPN 확장에서도 서버가 지원하는 프로토콜 목록을 포함하는 ServerHello TLS 메시지로 응답합니다. 그런 다음 클라이언트는 프로토콜을 선택하고 암호화 된 선택 사항을 서버에 전송합니다.

새로운 방법은 HTTP 2.0 용으로 설계되었으며 ALPN (http://tools.ietf.org/html/draft-ietf-tls-applayerprotoneg-05)이라고합니다. ClientHello TLS 메시지에 ID가 0x10 인 ALPN 확장이 포함되어 있습니다. 이번에는 클라이언트가 지원되는 프로토콜 목록을 보내고 서버는 ALPN 확장에서 서버가 선택한 프로토콜을 포함하는 ServerHello TLS 메시지를 보내고 응답합니다.

NPN 및 ALPN 확장 모두에서 프로토콜 목록은 http/1.1 또는 spdy/3과 같은 문자열로 전송됩니다.

일단 프로토콜을 선택하면 TLS 핸드 셰이크가 계속되고 두 당사자가 선택한 프로토콜을 즉시 말하기 시작합니다.

따라서 프로토콜의 협상을 인식하는 유일한 방법은 TLS를 사용하고 프로토콜 협상 확장을 제공하는 클라이언트를 사용하는 것입니다. 각 클라이언트는 특정 방식으로이를 수행하지만, 제가 아는 한 bash 스크립트는 아직 지원되지 않습니다.

예를 들어 HAProxy는 NPN과 ALPN (http://cbonte.github.io/haproxy-dconv/configuration-1.5.html)을 모두 지원하고 Jetty 9.2는 NPN과 ALPN (클라이언트와 서버 모두)을 모두 지원합니다.

Nginx 또는 Apache와 같은 다른 서버는 ALPN 용 패치가있는 NPN을 지원합니다 (어쨌든 HTTP 2.0에서 필요하므로).

NPN은 결국 사라질 것입니다. Google의 Adam Langley has stated에서 NPN은 ALPN을 사용하지 않을 예정입니다.

+0

그래서 wireshark를 사용하여 SPDY를 확인 하시겠습니까? 이 프로세스를 자동화하는 방법은 무엇입니까? – Jim

+0

Wireshark는 확실히 옵션입니다. 프로그래밍 가능한 옵션은 TLS 확장을 설정/검사 할 수있는 API를 찾는 것입니다. 나는 Java가 하나 (아직)를 제공하지 않지만 다른 언어/플랫폼이 제공 할 수 있음을 알고 있습니다. Jetty 프로젝트는 Java에서 NPN과 ALPN에 대한 API를 가지고 있지만 함께 사용할 수는 없습니다. Jetty API를 사용하면 SPDY 지원 (Jetty SPDY 클라이언트가하는 일)을 쉽게 감지 할 수 있습니다. – sbordet

+0

나는 이것이 잘못 입력 된 대답이 받아 들여지는 대답보다 낫다고 생각한다.+1 – cnicutar

관련 문제