BoringSSL vs quictls vs OpenSSL for supporting HTTP/3

NGINX 1.27.1에서 HTTP/3 지원을 위해 사용할 수 있는 TLS 라이브러리로 BoringSSL, quictls, 그리고 OpenSSL 3.3.2(3.2부터 지원)가 있다. 각 라이브러리는 HTTP/3 프로토콜을 구현하는 데 필수적인 QUIC 지원을 포함하며, 성능과 보안성 측면에서 차이가 있다.

1. BoringSSL

Google에서 관리하는 오픈소스 라이브러리로, 성능 최적화에 강점이 있다. BoringSSL은 불필요한 기능을 제거해 가볍고 빠른 처리를 목표로 한다. 주로 Chromium 프로젝트Android에서 사용되며, 최신 QUIC 및 HTTP/3 프로토콜 지원이 빠르다. 구조가 단순한 만큼 설정이 쉽지는 않지만, 최신 기술을 빠르게 적용할 수 있다. 보안 측면에서는 Google이 유지 보수하는 만큼 빠른 보안 패치가 제공된다.

  • 장점: 경량화된 구조와 빠른 HTTP/3 및 QUIC 지원
  • 단점: 기능이 적고 설정이 다소 어려울 수 있음
  • 지원하는 HTTP/3 버전: 최신 HTTP/3 버전을 빠르게 지원
  • 보안: 최신 보안 패치를 빠르게 제공

2. quictls

quictls는 OpenSSL을 기반으로 QUIC 및 HTTP/3 지원을 추가한 프로젝트다. OpenSSL의 안정성과 호환성을 유지하면서도 QUIC를 지원하기 때문에 NGINX와의 호환성이 높다. 사용이 간편하며, 성능 면에서도 괜찮은 결과를 보여준다. 다만 BoringSSL에 비해 상대적으로 최신 기술 적용 속도가 느릴 수 있다.

  • 장점: OpenSSL 기반의 안정성과 호환성
  • 단점: 최신 기능 업데이트가 다소 느림
  • 지원하는 HTTP/3 버전: 최신 HTTP/3 지원
  • 보안: OpenSSL의 보안 취약점에 영향을 받을 수 있음

3. OpenSSL 3.3.2

가장 널리 사용되는 오픈소스 암호화 라이브러리로, 다양한 환경에서 사용 가능하다. OpenSSL 3.3.2는 기본적으로 HTTP/3를 지원하며, QUIC도 설정을 통해 사용할 수 있다. 다만 기능이 많아 구조가 복잡할 수 있으며, 성능 면에서 BoringSSL이나 quictls보다 다소 느릴 수 있다.

  • 장점: 다양한 기능과 높은 호환성
  • 단점: 상대적으로 느린 성능과 복잡한 설정
  • 지원하는 HTTP/3 버전: 최신 HTTP/3 지원
  • 보안: 보안 취약점에 대한 패치가 자주 이루어지나, 복잡한 구조로 인해 잠재적인 위험 존재

성능 비교

BoringSSL은 최적화가 잘 되어 있어 가장 빠른 성능을 보여준다. quictls는 그 다음으로 성능이 좋으며, OpenSSL 3.3.2는 범용성이 높은 대신 다소 느린 성능을 보일 수 있다. HTTP/3와 같은 최신 프로토콜을 사용할 때 BoringSSL이 성능면에서 우수하다.

결론

  • BoringSSL: 성능과 최신 프로토콜 지원에 초점을 맞추고 있다면 최적의 선택.
  • quictls: OpenSSL 기반의 안정성과 QUIC 기능을 모두 원할 때 적합.
  • OpenSSL 3.3.2: 안정성과 범용성에 초점을 맞추고, 성능 저하는 감수할 수 있을 때 사용.

세 가지 라이브러리 모두 오픈소스이며, BoringSSL은 Google, quictls는 Cloudflare, OpenSSL은 OpenSSL 프로젝트에서 관리한다.

특이한 점은 1.27.1의 nginx에서는 worker_processes 를 auto(기본설정)으로 해서 8코어 cpu 환경에서 단일 프로세스로 실행되는 경우에만 정상적으로 접속이 되었다.
아마 quic가 프로세스를 직접 관리하는게 아닐지…

Leave a Comment

Index