Apache 2.4系でHTTP/2サーバを構築してみるテスト。
Apache 2.4.52のOpenSSL3.0系への対応についてOpenSSL 3.0系に対応するApache HTTPD 2.4系のリリースが秒読みに入ってきました。 そこで、
OpenSSL 3.0.8のインストール方法基本的に、「インストールするもの」で説明したとおりの方法で、ソースコードのtar.gzファイルからコンパイル、インストールができます。 $ cd ~/src $ curl -O https://www.openssl.org/source/openssl-3.0.8.tar.gz $ gzip -dc openssl-3.0.8.tar.gz|tar xvf - $ cd openssl-3.0.8 …(省略)… $ ./config …(省略)… $ gmake depend $ gmake …(省略)… $ sudo gmake install 続いてhttpdをインストールします。今回試した者は、リリース候補版(RC1)になります。なので、以下の手順は、正式リリースまでお待ち頂くことをオススメします。 こちらも、「インストールするもの」で説明したとおりの方法でOKです。 $ cd ~/src $ wget hhttps://dlcdn.apache.org//httpd/httpd-2.4.56.tar.gz …(省略)… $ gzip -dc httpd-2.4.56.tar.gz |tar xvf - …(省略)… $ cd httpd-2.4.56 $ ./configure --enable-ssl --enable-ssl-staticlib-deps --enable-so --enable-http2 --with-apr=/usr/local/apr/bin/apr-1-config --with-apr-util=/usr/local/apr/bin/apu-1-config --with-include-apr=/usr/local/apr/include/ --enable-mpms-shared=all --with-ssl=/usr/local --with-nghttp2=/usr/local/ …(省略)… $ gmake …(省略)… $ sudo gmake install コンパイル自体は、従来通りの方法で問題無いので、再起動します。 # /usr/local/apache2/bin/apachctl -t Syntax OK # /usr/local/apache2/bin/apachctl stop # /usr/local/apache2/bin/apachctl start とします。私の環境では、Syntax OKと出たので、Apacheのhttpd.confの設定自体を変更すること無く、OpenSSL 3.0.3に移行できました。 HTTP/2のnghttpのライブラリも特にいじる必要はありません。Apacheでは、HTTP/2のTLS部分をmod_sslが担っているため、今回のmod_sslの修正が肝となる感じですね。
OpenSSL1.1系以前のAPIを使ったモジュールについてコンパイル自体は、従来通りの方法で問題無いのですが、自作のモジュール内で、OpenSSLのAPI関数を使用している場合、注意が必要です(そんな人あまり居ないと思いますが・・・)。 OpenSSL 1.1系以前から、OpenSSL 3.0系に移植した際に行った修正は、以下の通りです。 私が修正したものは、 EVP_PKEY_get0_RSA(OpenSSL3.0では非推奨の関数)の戻り値の型修正前:RSA* rsa =EVP_PKEY_get0_RSA(pkey);⇒修正後: const rsa_st* rsa =EVP_PKEY_get0_RSA(pkey); EVP_PKEY_get0_EC_KEY(OpenSSL3.0では非推奨の関数)の戻り値の型修正前:EC_KEY *ec = EVP_PKEY_get0_EC_KEY(pkey);⇒修正後: const ec_key_st* ec = EVP_PKEY_get0_EC_KEY(pkey); コールバック関数の定義バグの修正CRYPTO_get_ex_new_indexの引数5個目の間違っていた定義がOpenSSL3.0で修正された影響 修正前:typedef int CRYPTO_EX_dup(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from, void *from_d, int idx, long argl, void *argp);⇒修正後: typedef int CRYPTO_EX_dup(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from, void **from_d, int idx, long argl, void *argp);↑の修正後の定義に基づいて、コールバック関数を書き直します。 の以上の修正でワーニングは出るもののコンパイルは通りました。 EVP_PKEY_get0_RSA関数や、EVP_PKEY_get0_EC_KEY関数自体が、廃止の方向なので、少しずつこの部分を修正していこうと思います。
|