Почему тест 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)

Встречные вопросы приветствуются!

1
задан 13 April 2017 в 15:14
4 ответа

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

.
0
ответ дан 3 December 2019 в 18:31

Выход ldd не содержит ссылки на libssl.so. Это указывает на то, что ваш Apache использует статически линкованную версию SSL-библиотеки, что означает, что OpenSSL включен в двоичный файл Apache2.

Таким образом, ваш Apache2 не использует SSL-библиотеку в вашей системе.

.
2
ответ дан 3 December 2019 в 18:31

Я не нахожу другого объяснения, кроме как предполагать, что у вас может быть установлено две версии 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/сервера так, чтобы обновления 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, в вашем случае.

1
ответ дан 3 December 2019 в 18:31

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

0
ответ дан 3 December 2019 в 18:31

Теги

Похожие вопросы