Search
Duplicate

ALPN (Application Layer Protocol Negotiation)

ALPN은 이름에서 의미하는 바와같이 이러한 필요를 충족시키는 TLS 확장이다. TLS Handshake를 확장하여 네트워크 peer들 간에 추가적인 roundtrip 없이 프로토콜을 협상하도록 한다. 과정은 다음과 같다.
Client는 ClientHello 메시지 안에 응용프로그램이 지원하는 목록을 포함하고 있는 ProtocolNameList 필드를 추가한다.
Server 는 ProtocolNameList 필드를 살피고 SeverHello 메시지의 일부에 선택된 프로토콜을 나타내는 ProtocolName 필드를 반환한다.
Server는 하나의 프로토콜 명을 응답하겠지만, 만약 Client가 요청한 목록에서 지원되는 것이 없다면 연결은 끊어지게 될것이다. 일단 TLS hadnshake가 완료되면 보안 연결이 수립되고 Client 와 Server는 어떤 응용프로그램 프로토콜을 사용할지 동의한다. 그리고 협상된 프로토콜을 통해 Client와 Sever는 바로 메시지를 교환할 수 있다.
NPN과 ALPN의 역사와 관계
Next Protocol Negotiation (NPN) 은 TLS Handshake 중에 효과적인 응용프로그램 프로토콜 협상을 위해서 구글에서 개발한 SPDY의 일부로 개발된 TLS 확장이다. ALPN과 동등한 기능적인 결과를 가져온다.
ALPN은 NPN을 수정하여 확장된 버전으로 IETF에 승인을 받았다. NPN에서는 Server 가 어떤 프로토콜을 지원한느지 알려주고 Client는 프로토콜을 선택하고 결정한다. ALPN에서는 이 교환이 역으로 진행된다. Client가 어떤 프로토콜을 지원하는지 알려주고, Server는 프로토콜을 선택하고 결정한다. 그 이유는 ALPN이 다른 프로토콜 협상 표준과 더 가깝기 때문이다.