NGINX.COM
Web Server Load Balancing with NGINX Plus

開発者は通常、リリースされたサポート対象となっている公式のライブラリを使用してアプリケーションやインフラを構築したいと考えています。HTTP/3でも、本番インフラにおけるメンテナンスコストや運用の複雑さを増加させずにQUICをサポートする便利なライブラリが強く求められています。

多くのQUIC+HTTP/3ユーザーにとって、そのデフォルトの暗号ライブラリはOpenSSLです。ほとんどのLinuxベースのオペレーティングシステムにデフォルトでインストールされているOpenSSLは主要なトランスポートレイヤーセキュリティ(TLS)ライブラリであり、大多数のネットワークアプリケーションで使用されています。

課題:OpenSSLとQUIC+HTTP/3の間の非互換性

このように広く使用されているにもかかわらず、OpenSSLはQUICサポートに必要なTLS APIを提供していません。その代わりに、OpenSSL Management Committeeは完全なQUICスタックを独自に実装することを決定しました。この試みはOpenSSL v3.4で計画されている相当な努力ではありますが、OpenSSLのロードマップによると2024年末まででも実現しそうにはありません。さらに、このOpenSSL実装の初期の実用最小限の製品にはQUIC API実装が含まれていないので、ユーザーがOpenSSLでHTTP/3サポートを利用できる明確な道は示されていません。

QUIC TLSサポートのオプション

この状況においてHTTP/3ニーズのためにQUIC TLSサポートを必要としているユーザーには2つの選択肢があります。

  • OpenSSL QUIC実装 – 前述のように、OpenSSLは現在、完全なQUICスタックを独自に実装しようと取り組んでいます。この開発はすべてのQUIC機能を実装内にカプセル化するもので、これにより、HTTP/3 ユーザーはQUIC固有の機能について心配することなくOpenSSL TLS APIを簡単に使用できるようになります。
  • BoringSSL QUIC APIをサポートするライブラリBoringSSLquicTLSLibreSSL(これらはすべてOpenSSLのフォークとして始まりました)などのさまざまなSSLライブラリは現在、BoringSSL QUIC APIを実装することでQUIC TLS機能を提供しています。しかし、これらのライブラリはOpenSSLほど広く採用されていません。また、この選択肢ではSSLライブラリをソースから構築して、QUIC+HTTP/3サポートを必要とするすべてのサーバーにインストールする必要があるのですべての人にとっての実行可能な選択肢ではないかもしれません。それでも、OpenSSLのQUIC TLS実装が実現しない現状ではこれはHTTP/3を使いたいユーザーにとっての唯一の選択肢です。

新しいソリューション:OpenSSL互換レイヤー

NGINXはこれらの課題を受け、OpenSSLを使用するQUIC+HTTP/3導入を簡素化するOpenSSL互換レイヤーを作成しました。これは本番環境で別のSSLライブラリを維持する複雑さを緩和します。

OpenSSL互換レイヤーはバージョン1.25.0以降のNGINX Open Sourceメインライン版およびNGINX Plus R30で利用でき、これにより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コミュニティ全体に提供する上で力になると私たちは信じています。

注: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のOpenSSL互換レイヤーはNGINX Open SourceからまたはNGINX Plusの30日間無料トライアルからご利用可能です。皆様のお役に立てれば幸いです。ご意見お待ちしております。

QUIC+HTTP/3とOpenSSLを使用したNGINXの詳細については、以下のリソースを参照してください。

Hero image
NGINXクックブック 設定レシピ集(日本語版)

待望の【O'Reilly】NGINX Cookbook日本語版がついに完成!NGINXクックブックは、NGINXを最大限に活用する方法を解説しています。



著者について

Prabhat Dixit

Principal Product Manager

About F5 NGINX

F5 NGINXについて
F5, Inc.は、人気のオープンソースプロジェクト「NGINX」を支援しています。NGINXはモダンアプリケーションを開発・構築するためのテクノロジースイートを提供しています。NGINXとF5製品との併用で、コードからユーザーまでの広範なアプリケーション領域をサポートし、マルチクラウドアプリケーションサービスとしてNetOpsとDevOps間の課題を解決します。

詳しくはnginx.co.jpをご覧ください。Twitterで@nginxをフォローして会話に参加することもできます。