Назад | Перейти на главную страницу

Почему тест HTTP / 2 говорит, что у меня есть поддержка ALPN, даже если у меня только OpenSSL1.0.1t?

Этот вопрос как бы связан с этим Почему мой сервер не поддерживает ALPN?

Но в моем случае то же самое тест говорит, что ALPN поддерживается, даже если я не использую OpenSSL1.0.2, а только OpenSSL1.0.1t

В настоящее время я использую Apache2.4.25 с активированным h2. Но меня все еще беспокоит, что ALPN поддерживается, даже если мой OpenSSL не поддерживает его?

Мой 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 в вашей системе.

Я не могу найти никакого другого объяснения, кроме предположения, что у вас могут быть установлены две версии openSSL (или результаты теста неверны).

Mod_http2 Apache2 основан на 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 / servername, чтобы обновления 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) - основное различие между двумя людьми, которые объявляют протоколы. Но я просто не могу найти логического объяснения вашим выводам, поэтому должен спросить, уверены ли вы в своих предпосылках.

Вы можете обслуживать HTTP / 2 без ALPN (я проверил, используя тест / инструмент, с которым вы связались), но я не могу найти ничего, чтобы объяснить, почему ALPN будет отображаться как поддерживаемый.

Единственное, что я смог найти, - это отчет об ошибке для RH, где эта проблема обсуждается довольно подробно:

https://bugzilla.redhat.com/show_bug.cgi?id=1276310

Есть предположения, что команда RH может что-то с этим сделать, но я не вижу четких указаний на обратный перенос ALPN в 1.0.1. И не знаю, актуально ли обсуждение RedHat в вашем случае.

Кажется, что apache 2.4.25 из тестового репо скомпилирован вместе с libssl 1.0.2, что объясняет, почему сервер поддерживает ALPN, даже если OpenSSL_1.0.2 не установлен в системе.

Я не могу напрямую комментировать вопрос ALPN, но ldd не следует использовать на /usr/sbin/apache2 если только apachectl -M указывает, что ssl_module или http2_module являются статическими, а не общими (shared является значением по умолчанию для большинства модулей). использовать ldd $(locate mod_ssl.so) соотв. ldd $(locate mod_http2.so) вместо. Оттуда должно быть возможно узнать, с какой версией вы действительно связаны.