Saya saat ini menjalankan server Ubuntu 16.04.1 LTS menggunakan NGINX 1.11.9 dan openssl 1.0.2g.
Menurut semua yang saya baca, versi ini harus mendukung ALPN, namun ketika saya menjalankan tes pada alat HTTP / 2 Test KeyCDN, saya mendapatkan "ALPN tidak didukung"
Dan ketika saya mengeksekusi echo | openssl s_client -alpn h2 -connect example.com:443 | grep ALPN
, saya mendapatkan:
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
Tidak mengaktifkan ALPN menonaktifkan HTTP2 agar tidak sepenuhnya diaktifkan. Bagaimana cara saya mengaktifkan ALPN?
EDIT
nginx -V
menunjukkan:
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
keluaran:
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
- tebak itulah jawabannyaopenssl version -a
, sehingga kami dapat melihat apakah OpenSSL Anda dibuat dengan flag / opsi yang tidak terduga?Jawaban:
Seperti yang ditunjukkan oleh @AlexyTen, akar penyebabnya adalah, walaupun saya telah menginstal OpenSSL 1.0.2g, NGINX perlu dibangun dengan OpenSSL dan dibangun dengan 1.0.1f yang tidak mendukung ALPN.
NGINX perlu dibangun kembali dengan OpenSSL 1.0.2 atau lebih baru dan diinstal ulang. Saya menemukan beberapa tutorial online tetapi karena saya menggunakan server Digital Ocean, saya menggunakan topik bantuan ini untuk menyelesaikan masalah bagi saya: https://www.digitalocean.com/community/questions/how-to-get-already- diinstal-nginx-untuk-menggunakan-openssl-1-0-2-untuk-alpn
Saya pertama kali perlu menginstal beberapa perpustakaan baru:
Saya kemudian menjalankan skrip ini: https://gist.github.com/AJMaxwell/f6793605068813aae888216b02364d85
Saya memulai kembali menggunakan
sudo shutdown -r now
dan berlaringinx -V
lagi. Kali ini memberi saya:Saya juga menjalankan tes http2 keycdn lagi dan itu berlalu.
sumber
Saya telah membuat skrip bash yang secara otomatis mengunduh, mengkompilasi dan menginstal Nginx dengan OpenSSL di Debian / Ubuntu, RHEL / CentOS dan distro lainnya. Biner yang dihasilkan persis sama dengan biner yang mendistribusikan Nginx melalui repositori resminya kecuali ia hadir dengan OpenSSL versi terbaru.
Script tidak mengubah instalasi OpenSSL, hanya biner Nginx. Ini adalah pilihan yang baik jika Anda tidak ingin bergantung pada paket yang dibuat dan didistribusikan oleh sumber tidak resmi.
https://github.com/victordzmr/nginx-compiler
sumber
Instal nginx ppa dan itu akan mendukung ALPN:
sumber
hda-me/nginx-stable
sehingga Anda dapat menjalankan modul brotli dan dinamis