Pertanyaan Mengapa ALPN tidak didukung oleh server saya?


Saat ini saya 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 Alat Uji HTTP / 2 KeyCDN, Saya mendapat "ALPN tidak didukung"screen capture of keycdn test report

Dan ketika saya mengeksekusi echo | openssl s_client -alpn h2 -connect example.com:443 | grep ALPN, Saya mendapat:

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 memiliki ALPN diaktifkan menonaktifkan HTTP2 dari sepenuhnya diaktifkan. Bagaimana cara 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"

9
2018-02-09 07:30




built with OpenSSL 1.0.1f - tebak itu jawabannya - Alexey Ten
Di mana Anda mendapatkan nginx Anda? Mungkin Anda harus tetap dengan salah satu yang ada di repo ubuntu resmi. Ini akan menjadi 1.10.0, tapi setidaknya itu akan dibangun dengan versi opensl yang benar - Alexey Ten
NGINX datang dengan distro Unbuntu yang saya pasang dari host saya, Digitalocean, itu juga mungkin bahwa ini adalah karena peningkatan yang saya lakukan dari 14.04 ke 16.04. Sepertinya saya perlu membangun kembali NGINX entah bagaimana untuk menyelesaikan ini. - Godwin
Bisakah Anda juga menambahkan output openssl version -a, sehingga kita dapat melihat apakah OpenSSL Anda dibangun dengan bendera / opsi yang tidak terduga? - Castaglia
@Castaglia, tentu, saya memperbarui pertanyaannya. - Godwin


Jawaban:


Seperti yang ditunjukkan oleh @AlexyTen, akar penyebabnya adalah bahwa, meskipun saya sudah 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 di atasnya 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-installed-nginx-to-use-openssl-1-0-2-for-alpn

Saya pertama kali perlu menginstal beberapa pustaka baru:

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

Saya kemudian menjalankan skrip ini: https://gist.github.com/AJMaxwell/f6793605068813aae888216b02364d85

Saya mulai menggunakan kembali sudo shutdown -r now dan berlari nginx -V lagi. Kali ini memberi saya:

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

Saya juga menjalankan pengujian http2 keycdn lagi dan itu berlalu.


9
2018-02-09 19:38





Saya telah membuat script 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 yang mendistribusikan Nginx melalui repositori resminya kecuali bahwa ia datang dengan versi terbaru OpenSSL.

Skrip tidak mengubah instalasi OpenSSL, hanya biner Nginx. Ini adalah pilihan yang baik jika Anda tidak ingin bergantung pada paket yang dibangun dan didistribusikan oleh sumber tidak resmi.

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


2
2018-04-29 18:23



Mengapa tidak mengandalkan paket yang Anda buat sendiri daripada menginstal binari yang tidak terlacak? - chicks
@chicks Ini adalah skrip yang membangun Nginx, bukan biner. Mengunduh binari dari sumber yang tidak dikenal mungkin berbahaya, maka saya telah membuatnya. - Víctor Díaz


Instal ppa nginx dan itu akan mendukung ALPN:

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

1
2018-04-12 03:09



lebih baik dengan hda-me/nginx-stable sehingga Anda dapat menjalankan modul brotli dan dinamis - Jacob Evans