web-dev-qa-db-ja.com

OpenSSL1.0.1tしかないのに、HTTP / 2テストでALPNサポートがあると表示されるのはなぜですか?

この質問はこれに関連しています なぜ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)

反論は大歓迎です!

1
Orphans

テストリポジトリのApache2.4.25はlibssl1.0.2と一緒にコンパイルされているようです。これは、OpenSSL1.0.2がシステムにインストールされていない場合でも、サーバーがALPNをサポートしている理由を説明しています。

0
Orphans

ldd出力には、libssl.soへの参照は含まれていません。これは、Apacheが静的にリンクされたバージョンのSSLライブラリを使用していることを示しています。これは、OpenSSLがApache2バイナリファイルに含まれていることを意味します。

そのため、Apache2はシステムでSSLライブラリを使用しません。

2
Tero Kilkanen

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関連の議論があなたのケースに関連しているかどうかわからない。

1