OpenSSL 3.2 と HTTP/3 対応の cURL をビルドする

2024/04/26に公開

実験のために OpenSSL 3.2 と HTTP/3 対応の cURL をビルドしました。2023年12月にリリースされた OpenSSL 3.2 から QUIC クライアント API がサポートされました。

いろいろな TLS ライブラリごとに cURL をビルドする必要があるので、$HOME/http3 ディレクトリをベースにしました。OS は Chromebook の Linux 環境下の Debian 12 Bookworm です。ビルドツールに関して後述の nghttp2 のビルドのために次のパッケージを導入しました。

sudo apt-get install g++ clang make binutils autoconf automake \
  autotools-dev libtool pkg-config

まず OpenSSL v3.2 をバックエンドにしてビルドしました。OpenSSL v3.3 も試しましたがうまくいきませんでした。

ホームディレクトリを $HOME/http3/openssl3.2 とします。まず OpenSSL 3.2 をビルドします。

git clone --depth 1 -b openssl-3.2.0 https://github.com/openssl/openssl
cd openssl
./config --prefix=$PWD/.. --libdir=$PWD/../lib
make
make install
cd ../

./config enable-tls1_3 とビルドオプションを指定することもできますが、最新の OpenSSL では不要です。

$HOME/http3/openssl3.2 のもとに includelib ディレクトリが生成されていることを確認します

ls

ついでに pkg-config の検索対象である *.pc ファイルが lib/pkgconfig で生成されていることも確認します。このパスを PKG_CONFIG_PATH 変数を設定することで pkg-config の検索対象として指定することができます。

ls lib/pkgconfig

次に nghttp3 v1.1.0 をビルドします。

git clone -b v1.1.0 https://github.com/ngtcp2/nghttp3
cd nghttp3
git submodule update --init
autoreconf -fi
./configure --prefix=$PWD/.. --enable-lib-only
make
make install
cd ../

最後に curl をビルドします

git clone https://github.com/curl/curl
cd curl
autoreconf -fi
PKG_CONFIG_PATH=$PWD/../lib/pkgconfig \
./configure \
--prefix=$PWD/.. \
--with-openssl \
--with-openssl-quic \
--with-nghttp3

HTTP/3 が有効になっていることを目視で確認します

ビルドしてインストールします

make
make install
cd ../

cURL のバージョンを調べてみましょう

bin/curl --version

HTTP/2 もサポートしたいのであれば nghttp2 をビルドします。

git clone -b v1.61.0 https://github.com/nghttp2/nghttp2
cd nghttp2
autoreconf -fi
PKG_CONFIG_PATH=$PWD/../lib/pkgconfig \
  ./configure --prefix=$PWD/..
make
make install
cd ../

cURL をビルドし直します。

cd curl
PKG_CONFIG_PATH=$PWD/../lib/pkgconfig \
./configure \
--prefix=$PWD/.. \
--with-openssl \
--with-openssl-quic \
--with-nghttp3
make
make install
cd ../

Discussion