Perché ALPN non è supportato dal mio server?


11

Attualmente sto eseguendo un server Ubuntu 16.04.1 LTS usando NGINX 1.11.9 e openssl 1.0.2g.

Secondo tutto quello che ho letto, queste versioni dovrebbero supportare ALPN, ma quando eseguo un test sullo strumento di test HTTP / 2 di KeyCDN , ricevo "ALPN non è supportato"cattura dello schermo del rapporto di prova di keycdn

E quando eseguo echo | openssl s_client -alpn h2 -connect example.com:443 | grep ALPN, ottengo:

depth=3 C = SE, O = AddTrust AB, OU = AddTrust External TTP Network, CN = AddTrust External CA Root
verify return:1
depth=2 C = GB, ST = Greater Manchester, L = Salford, O = COMODO CA Limited, CN = COMODO RSA Certification Authority
verify return:1
depth=1 C = GB, ST = Greater Manchester, L = Salford, O = COMODO CA Limited, CN = COMODO RSA Domain Validation Secure Server CA
verify return:1
depth=0 OU = Domain Control Validated, OU = EssentialSSL Wildcard, CN = *.example.com
verify return:1
No ALPN negotiated
DONE

Non avere ALPN abilitato disabilita HTTP2 dalla piena abilitazione. Come abilito ALPN?

MODIFICARE

nginx -V Spettacoli:

nginx version: nginx/1.11.9
built by gcc 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
built with OpenSSL 1.0.1f 6 Jan 2014 (running with OpenSSL 1.0.2g  1 Mar 2016)
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie'

EDIT # 2

openssl version -a produzione:

OpenSSL 1.0.2h  3 May 2016
built on: reproducible build, date unspecified
platform: linux-x86_64
options:  bn(64,64) rc4(16x,int) des(idx,cisc,16,int) idea(int) blowfish(idx)
compiler: gcc -I. -I.. -I../include  -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -Wa,--noexecstack -m64 -DL_ENDIAN -O3 -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM
OPENSSLDIR: "/usr/local/ssl"

1
built with OpenSSL 1.0.1f- Suppongo che sia la risposta
Alexey Ten,

Dove hai preso la tua nginx? Probabilmente dovresti restare con uno che è nel repository ufficiale di Ubuntu. Sarebbe la 1.10.0, ma almeno sarebbe stata costruita contro la giusta versione di openssl
Alexey Ten,

NGINX è arrivato con la distribuzione Unbuntu che ho installato dal mio host, Digitalocean, è anche possibile che ciò sia dovuto all'aggiornamento che ho eseguito dal 14.04 al 16.04. Sembra che dovrei ricostruire NGINX in qualche modo per risolvere questo problema.
Godwin,

Potresti anche aggiungere l'output di openssl version -a, in modo che possiamo vedere se il tuo OpenSSL è stato creato con eventuali flag / opzioni inattese?
Castaglia,

@Castaglia, certo, ho aggiornato la domanda.
Godwin,

Risposte:


11

Come sottolineato da @AlexyTen, la causa principale era che, sebbene avessi installato OpenSSL 1.0.2g, NGINX doveva essere costruito con OpenSSL ed era costruito con 1.0.1f che non supporta ALPN.

NGINX deve essere ricostruito con OpenSSL 1.0.2 o successivo e reinstallato. Ho trovato alcuni tutorial online ma poiché sto usando un server Digital Ocean, ho usato questo argomento di aiuto per risolvere il problema per me: https://www.digitalocean.com/community/questions/how-to-get-already- installato-nginx-to-use-openssl-1-0-2-per-alpn

Prima dovevo installare alcune nuove librerie:

apt-get install libgeoip-dev libgd2-xpm-dev libperl-dev

Ho quindi appena eseguito questo script: https://gist.github.com/AJMaxwell/f6793605068813aae888216b02364d85

Ho riavviato usando sudo shutdown -r nowed eseguito di nginx -Vnuovo. Questa volta mi ha dato:

nginx version: nginx/1.11.0
built by gcc 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)
built with OpenSSL 1.0.2h  3 May 2016
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-http_perl_module=dynamic --with-threads --with-stream --with-stream_ssl_module --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_v2_module --with-openssl=/root/openssl-1.0.2h --add-module=/root/ngx_pagespeed-release-1.11.33.2-beta

Ho anche eseguito di nuovo il test http2 di keycdn ed è passato.


2

Ho creato uno script bash che scarica, compila e installa automaticamente Nginx con OpenSSL su Debian / Ubuntu, RHEL / CentOS e altre distribuzioni. Il binario risultante è esattamente lo stesso di quello che distribuisce Nginx attraverso il suo repository ufficiale, tranne per il fatto che viene fornito con l'ultima versione di OpenSSL.

Lo script non modifica l'installazione di OpenSSL, ma solo il binario Nginx. È una buona opzione se non si desidera fare affidamento su pacchetti creati e distribuiti da fonti non ufficiali.

https://github.com/victordzmr/nginx-compiler


Perché non fare affidamento sui pacchetti creati dall'utente invece di installare binari non tracciati?
pulcini,

1
@chicks È uno script che costruisce Nginx, non un binario. Scaricare binari da fonti sconosciute può essere pericoloso, quindi l'ho creato.
Víctor Díaz,

1

Installa nginx ppa e supporterà ALPN:

sudo add-apt-repository ppa:nginx/stable
sudo apt update
sudo apt dist-upgrade -y

1
meglio con hda-me/nginx-stablecosì puoi eseguire brotli e moduli dinamici
Jacob Evans,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.