Actualmente estoy ejecutando un servidor Ubuntu 16.04.1 LTS usando NGINX 1.11.9 y openssl 1.0.2g.
De acuerdo con todo lo que he leído, estas versiones deberían ser compatibles con ALPN, sin embargo, cuando ejecuto una prueba en la herramienta de prueba HTTP / 2 de KeyCDN, obtengo "ALPN no es compatible"
Y cuando ejecuto echo | openssl s_client -alpn h2 -connect example.com:443 | grep ALPN
, obtengo:
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
No tener ALPN habilitado deshabilita HTTP2 para que esté completamente habilitado. ¿Cómo habilito ALPN?
EDITAR
nginx -V
muestra:
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'
EDITAR # 2
openssl version -a
salida:
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"
built with OpenSSL 1.0.1f
- Supongo que esa es la respuestaopenssl version -a
, para que podamos ver si su OpenSSL se creó con alguna opción / indicador inesperado?Respuestas:
Como señaló @AlexyTen, la causa raíz fue que, aunque tenía instalado OpenSSL 1.0.2g, NGINX necesitaba ser construido con OpenSSL y fue construido con 1.0.1f que no es compatible con ALPN.
NGINX necesita ser reconstruido con OpenSSL 1.0.2 o superior y reinstalado. Encontré algunos tutoriales en línea, pero debido a que estoy usando un servidor Digital Ocean, utilicé este tema de ayuda para resolver el problema: https://www.digitalocean.com/community/questions/how-to-get-already- instalado-nginx-to-use-openssl-1-0-2-for-alpn
Primero necesitaba instalar algunas bibliotecas nuevas:
Luego acabo de ejecutar este script: https://gist.github.com/AJMaxwell/f6793605068813aae888216b02364d85
Reinicié usando
sudo shutdown -r now
y corrí denginx -V
nuevo. Esta vez me dio:También ejecuté la prueba http2 de keycdn nuevamente y pasó.
fuente
He creado un script bash que descarga, compila e instala automáticamente Nginx con OpenSSL en Debian / Ubuntu, RHEL / CentOS y otras distribuciones. El binario resultante es exactamente el mismo que distribuye Nginx a través de su repositorio oficial, excepto que viene con la última versión de OpenSSL.
El script no modifica la instalación de OpenSSL, solo el binario Nginx. Es una buena opción si no desea confiar en paquetes construidos y distribuidos por fuentes no oficiales.
https://github.com/victordzmr/nginx-compiler
fuente
Instale el nginx ppa y será compatible con ALPN:
fuente
hda-me/nginx-stable
para poder ejecutar brotli y módulos dinámicos