ALPN neden sunucum tarafından desteklenmiyor?


11

Şu anda NGINX 1.11.9 ve 1.0.2g openssl kullanarak bir Ubuntu 16.04.1 LTS sunucusu çalıştırıyorum.

Okuduğum her şeye göre, bu sürümler ALPN'yi desteklemeli, ancak KeyCDN'nin HTTP / 2 Test aracında bir test çalıştırdığımda , "ALPN desteklenmiyor"keycdn test raporunun ekran görüntüsü

Ve idam echo | openssl s_client -alpn h2 -connect example.com:443 | grep ALPNettiğimde:

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

ALPN'nin etkin olmaması, HTTP2'nin tam olarak etkinleştirilmesini devre dışı bırakır. ALPN'yi nasıl etkinleştiririm?

DÜZENLE

nginx -V gösterileri:

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'

DÜZENLEME # 2

openssl version -a çıktı:

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- sanırım cevap bu
Alexey Ten

Nginx'inizi nereden buldunuz? Muhtemelen resmi ubuntu deposunda olana sadık kalmalısınız. 1.10.0 olurdu, ama en azından openssl'nin doğru versiyonuna karşı inşa edilecekti
Alexey Ten

NGINX, ana bilgisayarım Digitalocean'dan yüklediğim Unbuntu dağıtımıyla geldi, bunun 14.04'ten 16.04'e kadar yaptığım yükseltme nedeniyle olması da mümkün. Bunu çözmek için bir şekilde NGINX'i yeniden inşa etmem gerekiyor gibi görünüyor.
Godwin,

Ayrıca openssl version -a, OpenSSL'nizin beklenmedik bayrak / seçeneklerle oluşturulup oluşturulmadığını görebilmemiz için çıktısını da ekleyebilir misiniz ?
Castaglia

@Castaglia, elbette, soruyu güncelledim.
Godwin,

Yanıtlar:


11

@AlexyTen'in işaret ettiği gibi, temel neden, OpenSSL 1.0.2g yüklü olmasına rağmen, NGINX'in OpenSSL ile oluşturulması ve ALPN'yi desteklemeyen 1.0.1f ile inşa edilmesi gerektiğiydi.

NGINX'in OpenSSL 1.0.2 veya üstü ile yeniden oluşturulması ve yeniden kurulması gerekir. Çevrimiçi olarak birkaç ders buldum, ancak Digital Ocean sunucusu kullandığım için, sorunu çözmek için bu yardım konusunu kullandım: https://www.digitalocean.com/community/questions/how-to-get-already- yüklü-nginx kullanımlı-openssl-1-0-2-için-alpn

İlk önce birkaç yeni kütüphane kurmam gerekiyordu:

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

Daha sonra bu senaryoyu çalıştırdım: https://gist.github.com/AJMaxwell/f6793605068813aae888216b02364d85

Kullanarak yeniden başladım sudo shutdown -r nowve nginx -Vtekrar koştum . Bu sefer bana verdi:

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

Ayrıca yine keycdn'in http2 testini yaptım ve geçti.


2

Debian / Ubuntu, RHEL / CentOS ve diğer dağıtımlarda Nginx'i OpenSSL ile otomatik olarak indiren, derleyen ve yükleyen bir bash betiği oluşturdum. Ortaya çıkan ikili dosya, OpenSSL'nin en son sürümüyle birlikte gelmesi dışında Nginx'i resmi deposu aracılığıyla dağıtan ikili dosya ile tamamen aynıdır.

Komut dosyası OpenSSL kurulumunu değiştirmez, sadece Nginx ikili kodunu değiştirir. Resmi olmayan kaynaklar tarafından oluşturulan ve dağıtılan paketlere güvenmek istemiyorsanız iyi bir seçenektir.

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


İzlenmemiş ikili dosyaları yüklemek yerine neden oluşturduğunuz paketlere güvenmiyorsunuz?
civcivler

1
@chicks İkili değil, Nginx'i oluşturan bir betiktir. Bilinmeyen kaynaklardan ikili dosyalar indirmek tehlikeli olabilir, bu yüzden ben yarattım.
Víctor Díaz

1

Nginx ppa'yı yükleyin ve ALPN'yi destekleyecektir:

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

1
daha iyi kapalı hda-me/nginx-stableböylece brotli ve dinamik modülleri çalıştırabilirsiniz
Jacob Evans
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.