OpenSSL NGINX QUIC+HTTP/3 지원

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

개발자는 일반적으로 공개된 공식 라이브러리와 지원되는 라이브러리를 사용하여 애플리케이션과 인프라를 구축하고자 합니다. HTTP/3을 사용하더라도 운영 인프라의 유지보수 비용이나 운영 복잡성을 증가시키지 않으면서 QUIC를 지원하는 편리한 라이브러리에 대한 요구가 높습니다.

목차

1. 문제: OpenSSL과 QUIC+HTTP/3의 비호환성
1-1. QUIC TLS 지원 옵션
2. 새로운 솔루션: OpenSSL 호환성 레이어
2-1. OpenSSL 호환성 계층의 작동 방식
2-2. 0-RTT에 대한 참고 사항

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

이러한 광범위한 사용에도 불구하고 OpenSSL은 QUIC 지원에 필요한 TLS API를 제공하지 않습니다. 대신, OpenSSL관리 위원회는 자체적으로 완전한 QUIC 스택을 구현하기로 결정했습니다. 이러한 노력은 OpenSSL v3.4에서 상당한 노력을 기울일 계획이지만, OpenSSL로드맵에 따르면 2024년 말 이전에는 이루어지지 않을 것으로 보입니다. 또한, OpenSSL구현의 초기 최소 기능 구현 제품에는 QUIC APU 구현이 포함되지 않을 것이므로 사용자가 OpenSSL을 통해 HTTP/3 지원을 받을 수 있는 명확한 경로가 없습니다.

1-1. 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만큼 널리 채택되지는 않았습니다. 또한 이 옵션은 source에서 SSL 라이브러리를 빌드하고 QUIC+HTTP/3 지원이 필요한 모든 서버에 설치해야 하므로 모든 사용자에게 적합한 옵션이 아닐 수도 있습니다. 그렇긴 하지만, 현재 이 옵션은 OpenSSL QUIC TLS 구현이 아직 준비되지 않았기 때문에 HTTP/3을 사용하고자 하는 사용자에게 유일한 옵션입니다.

2. 새로운 솔루션: OpenSSL 호환성 레이어

NGINX는 이러한 문제에서 영감을 받아 OpenSSL을 사용하는 QUIC+HTTP/3 배포를 간소화하고 프로덕션 환경에서 별도의 SSL 라이브러리를 유지 관리하는 것과 관련된 복잡성을 피할 수 있도록 OpenSSL호환성 레이어를 만들었습니다.

버전 1.25.0 부터 NGINX 오픈 소스 메인라인NGINX Plus R30에서 사용할 수 있는 OpenSSL호환성 레이어를 사용하면 패치나 rebuild 없이도 NGINX가 OpenSSL 위에서 QUIC+HTTP/3을 실행할 수 있습니다. 따라서 QUIC 지원을 받기 위해 third-party TLS 라이브러리를 컴파일하고 배포해야 하는 종속성이 제거됩니다. 사용자가 third-party 라이브러리를 사용할 필요가 없기 때문에 해당 라이브러리의 일정과 로드맵에 대한 종속성도 완화되어 프로덕션 환경에 배포하기가 비교적 쉬운 솔루션이 됩니다.

2-1. OpenSSL 호환성 계층의 작동 방식

OpenSSL 호환성 계층은 이러한 단계를 구현합니다:

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

현재 OpenSSL의 채택 규모와 공식적인 QUIC+HTTP/3 지원 현황을 고려할 때, NGINX는 쉽고 확장 가능한 옵션으로 QUIC를 활성화하는 것이 올바른 방향으로 나아가는 단계라고 생각합니다. 또한 HTTP/3 채택을 촉진하고 귀중한 피드백을 제공할 수 있을 것입니다. 가장 중요한 것은 OpenSSL 호환성 계층이 기업 사용자와 전체 NGINX 커뮤니티를 위해 더욱 강력하고 확장 가능한 솔루션을 제공하는 데 도움이 될 것이라고 믿습니다.

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

2-2. 0-RTT에 대한 참고 사항

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

이 기능은 QUIC의 중요한 부분이지만, 아직 OpenSSL 호환성 계층에서는 지원되지 않습니다. 0-RTT가 필요한 특정 사용 사례가 있는 경우 로드맵에 반영될 수 있도록 피드백을 보내주시기 바랍니다.

지금 바로 NGINX 오픈 소스를 사용하거나 NGINX Plus의 30일 무료 체험판을 시작하여 NGINX의 OpenSSL 호환성 레이어를 사용할 수 있습니다. 유용하게 사용하시길 바라며, 여러분의 피드백을 환영합니다.

NGINX에 대한 최신 정보들을 빠르게 전달받고 싶으시다면, 아래의 뉴스레터를 구독하세요.