Ich verwende derzeit einen Ubuntu 16.04.1 LTS-Server mit NGINX 1.11.9 und openssl 1.0.2g.
Nach allem, was ich gelesen habe, sollten diese Versionen ALPN unterstützen. Wenn ich jedoch einen Test mit dem HTTP / 2-Testtool von KeyCDN durchführe , wird "ALPN wird nicht unterstützt" angezeigt.
Und wenn ich ausführe echo | openssl s_client -alpn h2 -connect example.com:443 | grep ALPN
, bekomme ich:
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
Wenn ALPN nicht aktiviert ist, wird HTTP2 nicht vollständig aktiviert. Wie aktiviere ich ALPN?
BEARBEITEN
nginx -V
zeigt an:
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
Ausgabe:
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
- denke, das ist die Antwortopenssl version -a
, damit wir sehen können, ob Ihre OpenSSL mit unerwarteten Flags / Optionen erstellt wurde?Antworten:
Wie @AlexyTen hervorhob, war die Hauptursache, dass NGINX, obwohl ich OpenSSL 1.0.2g installiert hatte, mit OpenSSL erstellt werden musste und mit 1.0.1f, das ALPN nicht unterstützt.
NGINX muss mit OpenSSL 1.0.2 oder höher neu erstellt und neu installiert werden. Ich habe einige Online-Tutorials gefunden, aber da ich einen Digital Ocean-Server verwende, habe ich dieses Hilfethema verwendet, um das Problem für mich zu lösen: https://www.digitalocean.com/community/questions/how-to-get-already- installiertes-nginx-to-use-openssl-1-0-2-for-alpn
Ich musste zuerst ein paar neue Bibliotheken installieren:
Ich habe dann gerade dieses Skript ausgeführt: https://gist.github.com/AJMaxwell/f6793605068813aae888216b02364d85
Ich habe mit neu gestartet
sudo shutdown -r now
und bin wieder gelaufennginx -V
. Diesmal gab es mir:Ich habe auch den http2-Test von keycdn erneut ausgeführt und er hat bestanden.
quelle
Ich habe ein Bash-Skript erstellt, das Nginx mit OpenSSL unter Debian / Ubuntu, RHEL / CentOS und anderen Distributionen automatisch herunterlädt, kompiliert und installiert. Die resultierende Binärdatei ist genau die gleiche wie die, die Nginx über sein offizielles Repository verteilt, außer dass sie mit der neuesten Version von OpenSSL geliefert wird.
Das Skript ändert nicht die OpenSSL-Installation, sondern nur die Nginx-Binärdatei. Dies ist eine gute Option, wenn Sie sich nicht auf Pakete verlassen möchten, die von inoffiziellen Quellen erstellt und verteilt werden.
https://github.com/victordzmr/nginx-compiler
quelle
Installieren Sie das nginx ppa und es wird ALPN unterstützen:
quelle
hda-me/nginx-stable
damit Sie brotli und dynamische Module ausführen können