블로그 | NGINX

NGINX를 사용한 OpenSSL에 대한 QUIC+HTTP/3 지원

NGINX-F5-수평-검정-유형-RGB의 일부
프라바트 딕시트 썸네일
프라바트 딕시트
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 구현의 초기 최소 실행 가능 제품에는 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 (모두 OpenSSL의 포크로 시작)과 같은 다양한 SSL 라이브러리는 이제 BoringSSL QUIC API를 구현하여 QUIC TLS 기능을 제공합니다. 그러나 이러한 라이브러리는 OpenSSL만큼 널리 채택되지 않았습니다. 이 옵션을 사용하려면 소스에서 SSL 라이브러리를 빌드하고 QUIC+HTTP/3 지원이 필요한 모든 서버에 설치해야 하므로, 모든 사람에게 적합한 옵션은 아닐 수 있습니다. 그러나 OpenSSL QUIC TLS 구현이 아직 준비되지 않았기 때문에 현재로선 이것이 HTTP/3를 사용하고자 하는 사용자에게 유일한 옵션입니다.

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

NGINX에서는 이러한 과제에서 영감을 얻어 OpenSSL을 사용하고 프로덕션 환경에서 별도의 SSL 라이브러리를 유지 관리하는 데 따른 복잡성을 피하는 데 도움이 되는 QUIC+HTTP/3 배포를 단순화하는 OpenSSL 호환성 계층을 만들었습니다.

버전 1.25.0부터 NGINX 오픈 소스 메인라인NGINX Plus R30 부터 사용 가능한 OpenSSL 호환성 계층을 통해 NGINX는 패치나 재빌드 없이도 OpenSSL을 기반으로 QUIC+HTTP/3를 실행할 수 있습니다. 이렇게 하면 QUIC 지원을 받기 위해 타사 TLS 라이브러리를 컴파일하고 배포할 필요가 없습니다. 사용자가 타사 라이브러리를 사용할 필요가 없으므로 해당 라이브러리의 일정과 로드맵에 대한 종속성도 완화되어 프로덕션에 배포하기가 비교적 쉬운 솔루션이 됩니다.

OpenSSL 호환성 계층의 작동 방식

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

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

오늘날 OpenSSL 채택 규모와 공식 QUIC+HTTP/3 지원 현황을 고려하면 QUIC을 활성화하는 쉽고 확장 가능한 옵션은 올바른 방향으로 나아가는 한 걸음이라고 생각합니다. 또한 이를 통해 HTTP/3 도입이 촉진되고 귀중한 피드백이 수집될 것입니다. 가장 중요한 점은 OpenSSL 호환성 계층이 기업 사용자와 전체 NGINX 커뮤니티에 보다 강력하고 확장 가능한 솔루션을 제공하는 데 도움이 될 것이라는 믿음입니다.

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

0-RTT에 대한 참고 사항

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

이 기능은 QUIC의 중요한 부분이지만 OpenSSL 호환성 계층에서는 아직 지원되지 않습니다. 0-RTT가 필요한 특정 사용 사례가 있는 경우 로드맵에 반영하기 위해 귀하의 피드백을 환영합니다.

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

오늘 NGINX 오픈 소스를 사용하거나 NGINX Plus의 30일 무료 평가판을 시작하여 NGINX의 OpenSSL 호환성 계층을 사용할 수 있습니다. 이 글이 유익하다고 생각되길 바라며, 귀하의 피드백을 환영합니다.

아래 리소스에서 QUIC+HTTP/3 및 OpenSSL을 갖춘 NGINX에 대한 자세한 정보를 확인할 수 있습니다.


"이 블로그 게시물에는 더 이상 사용할 수 없거나 더 이상 지원되지 않는 제품이 참조될 수 있습니다. 사용 가능한 F5 NGINX 제품과 솔루션에 대한 최신 정보를 보려면 NGINX 제품군을 살펴보세요. NGINX는 이제 F5의 일부가 되었습니다. 이전의 모든 NGINX.com 링크는 F5.com의 유사한 NGINX 콘텐츠로 리디렉션됩니다."