この質問はこれに関連しています なぜALPNが私のサーバーでサポートされていないのですか?
しかし、私の場合、同じ test は、OpenSSL1.0.2を使用せず、OpenSSL1.0.1tのみを使用している場合でも、ALPNがサポートされていることを示しています。
現在、h2をアクティブにしてApache2.4.25を使用しています。しかし、OpenSSLがALPNをサポートしていないはずなのに、ALPNがサポートされているのは気になりますか?
Conf対応の私のhttp2.conf:
Protocols h2 h2c http/1.1
H2Push on
H2PushPriority * after
H2PushPriority text/css before
H2PushPriority image/jpeg after 32
H2PushPriority image/png after 32
H2PushPriority application/javascript interleaved
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite 'EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS'
LDDからの出力:
╰─➤ ldd /usr/sbin/Apache2 1 ↵
linux-vdso.so.1 (0x00007ffc4d593000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fa1c2492000)
libaprutil-1.so.0 => /usr/lib/x86_64-linux-gnu/libaprutil-1.so.0 (0x00007fa1c2269000)
libapr-1.so.0 => /usr/lib/x86_64-linux-gnu/libapr-1.so.0 (0x00007fa1c2034000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fa1c1e17000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa1c1a6c000)
libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007fa1c1867000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fa1c165f000)
libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007fa1c1428000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fa1c1224000)
libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007fa1c0ffb000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa1c29a5000)
反論は大歓迎です!
テストリポジトリのApache2.4.25はlibssl1.0.2と一緒にコンパイルされているようです。これは、OpenSSL1.0.2がシステムにインストールされていない場合でも、サーバーがALPNをサポートしている理由を説明しています。
ldd
出力には、libssl.so
への参照は含まれていません。これは、Apacheが静的にリンクされたバージョンのSSLライブラリを使用していることを示しています。これは、OpenSSLがApache2バイナリファイルに含まれていることを意味します。
そのため、Apache2はシステムでSSLライブラリを使用しません。
2つのバージョンのopenSSLがインストールされている(またはテスト結果が間違っている)可能性があることを示唆する以外の説明は見つかりません。
Apache2のmod_http2はnghttp2に基づいており、そのドキュメント( https://nghttp2.org/documentation/nghttpx-howto.html#alpn-support )の状態:
ALPNサポート
ALPNサポートにはOpenSSL> = 1.0.2が必要です。
不思議なことに、1.0.1tのリリースノート( https://www.openssl.org/news/openssl-1.0.1-notes.html )は次のように述べています。
SSL_CTXの更新がALPNに影響するように、SNI /サーバー名コールバックの後にコールバックを呼び出すようにALPNの動作を変更します。
そのメッセージを追跡すると、 https://github.com/openssl/openssl/commit/1316ca80f4e1dc9339572c780d495f995fe0bad になります。
しかし、それは1.1.0にコードを提供しただけのようです-1.0.1tでの変更の証拠を見つけることができませんでした。
理論的には、ALPNとNPNは非常に密接に関連しています( https://hpbn.co/transport-layer-security-tls/#application-layer-protocol- negotiation-alpn )-プロトコルをアナウンスする2人の主な違い。しかし、私はあなたの発見に対する論理的な説明を見つけることができないので、あなたがあなたの前提を確信しているかどうか尋ねなければなりません。
ALPNなしでHTTP/2を提供できますが(リンクしたテスト/ツールを使用して確認しました)、ALPNがサポートされていると表示される理由を説明するものが見つかりません。
私が見つけた他の唯一のリードはRHのバグレポートであり、この問題についてはある程度詳しく説明されています。
https://bugzilla.redhat.com/show_bug.cgi?id=127631
RHチームがそれについて何かをするかもしれないという提案がありますが、1.0.1へのALPNのバックポートの明確な兆候は見られません。そして、RedHat関連の議論があなたのケースに関連しているかどうかわからない。