NGINX에서 OpenSSL을 통한 QUIC+HTTP/3 지원

NGINX | 2023년 9월 13일

개발자는 일반적으로 정식 출시되어 공식적으로 지원되는 라이브러리를 사용해 애플리케이션과 인프라를 구축하고자 합니다. HTTP/3의 경우에도 QUIC을 지원하면서 프로덕션 인프라의 유지 관리 비용이나 운영 복잡성을 높이지 않는 편리한 라이브러리가 절실히 필요합니다.

많은 QUIC+HTTP/3 사용자에게 기본 암호화 라이브러리는 OpenSSL입니다. OpenSSL은 대부분의 Linux 기반 운영 체제에 기본으로 설치되어 있으며, 가장 널리 사용되는 전송 계층 보안(TLS) 라이브러리로서 대다수의 네트워크 애플리케이션에서 사용됩니다.

문제: OpenSSL과 QUIC+HTTP/3 간의 비호환성

이처럼 널리 사용되고 있음에도 OpenSSL은 QUIC 지원에 필요한 TLS API를 제공하지 않습니다. 대신 OpenSSL 관리 위원회는 완전한 QUIC 스택을 자체적으로 구현하기로 결정했습니다. 이는 OpenSSL v3.4에 도입할 예정인 상당한 규모의 작업이지만, OpenSSL 로드맵에 따르면 2024년 말 이전에는 실현되기 어려울 것으로 보입니다. 또한 OpenSSL 구현의 초기 최소 기능 제품(MVP)에는 QUIC API 구현이 포함되지 않을 예정이므로, 사용자가 OpenSSL로 HTTP/3 지원을 이용할 수 있는 명확한 방법은 없습니다.

QUIC TLS 지원 옵션

이러한 상황에서 HTTP/3에 필요한 QUIC TLS 지원을 원하는 사용자는 다음 두 가지 옵션 중에서 선택할 수 있습니다:

  • OpenSSL QUIC 구현 – 앞서 언급했듯이 OpenSSL은 현재 자체적으로 완전한 QUIC 스택을 구현하기 위해 노력하고 있습니다. 이 개발이 완료되면 모든 QUIC 기능이 구현체 내에 포함되므로, HTTP/3 사용자는 QUIC 관련 기능을 신경 쓰지 않고도 OpenSSL TLS API를 훨씬 쉽게 사용할 수 있습니다.
  • BoringSSL QUIC API를 지원하는 라이브러리 – BoringSSL, quicTLS, LibreSSL 등 다양한 SSL 라이브러리(모두 OpenSSL의 포크로 시작됨)는 이제 BoringSSL QUIC API를 구현하여 QUIC TLS 기능을 제공합니다. 하지만 이러한 라이브러리는 OpenSSL만큼 널리 사용되지는 않습니다. 또한 이 방식을 사용하려면 SSL 라이브러리를 소스에서 빌드하고 QUIC+HTTP/3 지원이 필요한 모든 서버에 설치해야 하므로, 모든 사용자에게 적합한 선택지는 아닐 수 있습니다. 그렇지만 OpenSSL QUIC TLS 구현이 아직 준비되지 않았기 때문에 현재로서는 HTTP/3를 사용하려는 사용자가 선택할 수 있는 유일한 방법입니다.

새로운 솔루션: OpenSSL 호환성 계층

NGINX는 이러한 과제에서 영감을 받아 OpenSSL을 사용하는 QUIC+HTTP/3 배포를 간소화하고, 프로덕션 환경에서 별도의 SSL 라이브러리를 유지 관리하는 데 따르는 복잡성을 줄이기 위해 OpenSSL 호환성 계층을 개발했습니다.

Available with NGINX Open Source 메인라인 버전 1.25.0부터 및 NGINX Plus R30에서 제공되는 OpenSSL 호환성 계층을 사용하면 OpenSSL을 패치하거나 다시 빌드하지 않고도 NGINX에서 OpenSSL 기반의 QUIC+HTTP/3를 실행할 수 있습니다. 따라서 QUIC 지원을 위해 타사 TLS 라이브러리를 컴파일하고 배포할 필요가 없습니다. 또한 사용자가 타사 라이브러리를 사용할 필요가 없으므로 해당 라이브러리의 일정과 로드맵에 대한 의존성도 줄어들어 프로덕션 환경에 비교적 쉽게 배포할 수 있습니다.

OpenSSL 호환성 계층의 작동 방식

OpenSSL 호환성 계층은 다음 단계를 구현합니다:

  • QUIC 핸드셰이크를 OpenSSL에서 지원하는 TLS 1.3 핸드셰이크로 변환합니다.
  • TLS 핸드셰이크 메시지를 OpenSSL로 전달하고 OpenSSL에서 받아옵니다.
  • OpenSSL에서 핸드셰이크 및 애플리케이션 암호화 수준에 사용할 암호화 키를 가져옵니다.
  • QUIC 전송 매개변수를 OpenSSL에 전달하고 OpenSSL에서 가져옵니다.

현재 OpenSSL의 도입 규모와 공식 QUIC+HTTP/3 지원 현황을 고려할 때, QUIC를 쉽고 확장성 있게 활성화할 수 있는 옵션을 제공하는 것은 올바른 방향으로 나아가는 한 걸음이라고 생각합니다. 이는 HTTP/3 도입을 촉진하고 유용한 피드백을 얻는 데도 도움이 될 것입니다. 무엇보다도 OpenSSL 호환성 계층을 통해 엔터프라이즈 사용자와 전체 NGINX 커뮤니티에 더욱 안정적이고 확장 가능한 솔루션을 제공할 수 있을 것으로 확신합니다.

참고: OpenSSL 호환성 계층을 제공하여 NGINX 사용자가 쉽고 확장 가능한 옵션을 이용할 수 있도록 하는 한편, 사용자는 여전히 BoringSSL, quicTLS 또는 LibreSSL과 같은 타사 라이브러리를 NGINX와 함께 사용할 수 있습니다. 자신에게 적합한 방법을 결정하려면 어떤 접근 방식이 요구 사항을 가장 잘 충족하는지, 그리고 라이브러리를 종속성으로 컴파일하고 관리하는 데 얼마나 익숙한지를 고려하세요.

0-RTT에 관한 참고 사항

0-RTT는 TLS 핸드셰이크가 완료되기 전에 클라이언트가 애플리케이션 데이터를 전송할 수 있도록 하는 QUIC의 기능입니다. 0-RTT 기능은 이전 연결에서 협상된 매개변수를 재사용함으로써 구현됩니다. 클라이언트가 중요한 매개변수를 기억하고, 서버가 동일한 정보를 복구할 수 있도록 TLS 세션 티켓을 서버에 제공하면 이 기능이 활성화됩니다.

이 기능은 QUIC의 중요한 부분이지만, 아직 OpenSSL 호환성 계층에서는 지원되지 않습니다. 0-RTT가 필요한 구체적인 사용 사례가 있다면 향후 로드맵 수립에 참고할 수 있도록 의견을 보내주시기 바랍니다.

QUIC+HTTP/3 및 OpenSSL을 사용하는 NGINX에 대해 자세히 알아보기

지금 바로 NGINX Open Source에서 NGINX의 OpenSSL 호환성 레이어를 사용하거나 NGINX Plus 30일 무료 평가판을 시작할 수 있습니다. 유용하게 활용하시길 바라며, 여러분의 피드백을 기다리겠습니다.

QUIC+HTTP/3 및 OpenSSL을 사용하는 NGINX에 대한 자세한 내용은 아래 리소스에서 확인할 수 있습니다.


공유

관련 블로그 게시물

시청하기: KubeCon North America 2023에서의 NGINX Gateway Fabric
NGINX | 2023. 11. 30.

시청하기: KubeCon North America 2023에서의 NGINX Gateway Fabric

이 영상에서는 KubeCon의 NGINX 부스를 찾아가, 저희가 공개한 Kubernetes Gateway API 구현을 살펴봅니다.

F5 NGINX로 대규모 WAF 플릿을 확인하고 관리하는 2가지 방법
NGINX | 2023. 03. 23.

F5 NGINX로 대규모 WAF 플릿을 확인하고 관리하는 2가지 방법

앱 보안을 강화하는 두 가지 방법을 소개합니다. NGINX Management Suite를 통해 WAF 운영에 대한 가시성을 높이고, NGINX App Protect WAF를 활용해 코드형 보안을 구현하는 것입니다.

Ingress 컨트롤러 선택 가이드, 4부: NGINX Ingress Controller 옵션
NGINX | 2021. 09. 27.

Ingress 컨트롤러 선택 가이드, 4부: NGINX Ingress Controller 옵션

개발 주체, 개발 철학, 프로덕션 환경 준비도, 보안 및 지원을 기준으로 어떤 NGINX Ingress 컨트롤러가 가장 적합한지 알아보세요.

진화하는 공격 환경에 NGINX App Protect Denial of Service가 적응하는 방법
NGINX | 2021. 07. 06.

진화하는 공격 환경에 NGINX App Protect Denial of Service가 적응하는 방법

NGINX App Protect Denial of Service(DoS)가 계층 7 DoS 공격을 방어하기 위해 완화 방법을 실시간으로 조정하는 방식을 설명합니다. 정상적인 사용자 행동과 서버 상태에 대한 모델을 생성하여 공격을 나타내는 이상 징후를 감지하고 맞춤형 완화 시그니처를 적용할 수 있습니다.

NGINX Instance Manager를 활용한 대규모 구성 업데이트 및 인증서 관리
NGINX | 2021. 06. 30.

NGINX Instance Manager를 활용한 대규모 구성 업데이트 및 인증서 관리

NGINX Instance Manager 버전 1.0에는 두 가지 새로운 기능이 도입되었습니다. NGINX 인스턴스에 태그와 사용자 역할을 지정하면 전체 그룹에 구성을 한 번에 적용할 수 있습니다. 인증서 검사는 만료 예정인 인증서를 감지하여 서비스 중단을 방지할 수 있도록 인증서를 교체할 수 있게 해줍니다.

Netflix가 자사 CDN의 핵심으로 NGINX를 선택한 이유
NGINX | 2015. 03. 25.

Netflix가 자사 CDN의 핵심으로 NGINX를 선택한 이유

Netflix가 글로벌 콘텐츠 전송 네트워크인 Open Connect의 스트리밍 미디어 기술로 NGINX를 선택한 이유를 NGINX 개발자 Gleb Smirnoff에게서 알아보세요.