这个问题有点类似于这个为什么我的服务器不支持ALPN?
但在我的情况下,即使我不使用OpenSSL1.0.2,只有OpenSSL1.0.1t也支持ALPN
我目前使用Apache2.4.25与H2激活。 但是即使我的OpenSSL不支持它,它仍然困扰着ALPN的支持吗?
我的http2.conf在conf-enabled中:
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)
反对的问题表示赞赏!
ldd输出不包含任何对libssl.so引用。 这表明您的Apache使用SSL库的静态链接版本,这意味着OpenSSL包含在Apache2二进制文件中。
所以,你的Apache2不会在你的系统上使用SSL库。
我找不到任何其他解释,而不是build议你可能安装了两个版本的openSSL(或者testing结果是错误的)。
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 )提到:
修改ALPN的行为以在SNI / servernamecallback之后调用callback,从而对SSL_CTX的更新影响ALPN。
跟踪该消息导致https://github.com/openssl/openssl/commit/1316ca80f4e1dc9339572c780d495f995fe0bad0 。
然而,似乎只有1.1.0的代码贡献 – 我找不到在1.0.1t的变化的证据。
从理论上讲,ALPN和NPN是非常密切相关的( https://hpbn.co/transport-layer-security-tls/#application-layer-protocol-negotiation-alpn ) – 两者之间的主要区别是宣布协议。 但是我根本无法find你的发现的合理解释,所以不得不问你是否确定你的处所。
你可以在不使用ALPN的情况下服务HTTP / 2(我使用链接的testing/工具进行检查),但是我找不到任何解释为什么ALPN会显示为支持。
我能find的唯一的另一个领导是RH的一个错误报告,在这个问题上有一些讨论:
https://bugzilla.redhat.com/show_bug.cgi?id=1276310
有人build议,RH的团队可能会做些什么,但我没有看到任何明确的迹象表明ALPN回到1.0.1。 不知道你的情况是否与RedHat相关的讨论是相关的。
看起来来自testing仓库的apache 2.4.25与libssl 1.0.2编译在一起,这就解释了为什么即使系统上没有安装OpenSSL1.0.2,服务器也支持ALPN。