Por que o teste HTTP / 2 diz que tenho suporte a ALPN mesmo que eu tenha apenas o OpenSSL1.0.1t?

1

Esta questão está relacionada com este Porque é que a ALPN não é suportada? pelo meu servidor?

Mas, no meu caso, o mesmo teste diz que o ALPN é compatível mesmo se eu não estiver usando o OpenSSL1.0.2 e apenas OpenSSL1.0.1t

Atualmente estou usando o Apache2.4.25 com o h2 ativado. Mas ainda me incomoda que o ALPN seja suportado mesmo que meu OpenSSL não suporte isso?

Meu http2.conf em 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'

Saída do 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)

Counterquestions é apreciado!

    
por Orphans 15.03.2017 / 09:16

4 respostas

0

Parece que o apache 2.4.25 do repositório de teste é compilado junto com o libssl 1.0.2, que explica por que o servidor tem suporte a ALPN mesmo que o OpenSSL1.0.2 não esteja instalado no sistema.

    
por 17.03.2017 / 10:13
2

A saída ldd não inclui nenhuma referência a libssl.so . Isso indica que o seu Apache usa uma versão vinculada estaticamente da biblioteca SSL, o que significa que o OpenSSL está incluído no arquivo binário Apache2.

Assim, o seu Apache2 não usa a biblioteca SSL em seu sistema.

    
por 15.03.2017 / 16:57
1

Não consigo encontrar nenhuma outra explicação além de sugerir que você possa ter duas versões do openSSL instaladas (ou os resultados do teste estão errados).

O mod_http2 do Apache2 é baseado no nghttp2, e seu documento ( link ) afirma:

ALPN support

ALPN support requires OpenSSL >= 1.0.2.

Curiosamente, as notas de lançamento de 1.0.1t ( link ) mencionam:

Modify behavior of ALPN to invoke callback after SNI/servername callback, such that updates to the SSL_CTX affect ALPN.

O rastreamento dessa mensagem leva ao link .

Isso, no entanto, parece ter contribuído apenas com o código 1.1.0 - não consegui encontrar evidências de suas alterações em 1.0.1t.

Em teoria, ALPN e NPN são muito intimamente relacionados ( link ) - a principal diferença entre os dois sendo quem anuncia os protocolos. Mas eu simplesmente não consigo encontrar uma explicação lógica para suas descobertas, então tenho que perguntar se você tem certeza de suas premissas.

Você pode servir HTTP / 2 sem ALPN (eu verifiquei usando o teste / ferramenta que você vinculou), mas não consigo encontrar nada para explicar por que o ALPN seria mostrado como suportado.

A única outra pista que eu encontrei é um relatório de bug para RH, onde esse problema é discutido com alguma extensão:

link

Há sugestões de que a equipe de RH possa fazer algo a respeito, mas não vejo nenhuma indicação clara de um backport de ALPN no 1.0.1. E não sei se uma discussão relacionada à RedHat é relevante no seu caso.

    
por 15.03.2017 / 10:52
0

Não posso comentar diretamente sobre a questão ALPN, mas ldd não deve ser usado em /usr/sbin/apache2 , a menos que apachectl -M indique que ssl_module ou http2_module são estáticos em vez de compartilhados (o padrão é compartilhado para a maioria dos módulos) . use ldd $(locate mod_ssl.so) resp. ldd $(locate mod_http2.so) em vez disso. A partir daí, deve ser possível descobrir em qual versão você está realmente vinculado.

    
por 04.12.2018 / 18:54