Tại sao ALPN không được máy chủ của tôi hỗ trợ?


11

Tôi hiện đang chạy máy chủ Ubuntu 16.04.1 LTS bằng NGINX 1.11.9 và openssl 1.0.2g.

Theo mọi thứ tôi đã đọc, các phiên bản này sẽ hỗ trợ ALPN, nhưng khi tôi chạy thử nghiệm trên công cụ Kiểm tra HTTP / 2 của KeyCDN , tôi nhận được "ALPN không được hỗ trợ"chụp màn hình báo cáo thử nghiệm keycdn

Và khi tôi thực thi echo | openssl s_client -alpn h2 -connect example.com:443 | grep ALPN, tôi nhận được:

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

Không bật ALPN sẽ vô hiệu hóa HTTP2. Làm cách nào để bật ALPN?

BIÊN TẬP

nginx -V trình diễn:

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 đầu ra:

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- đoán đó là câu trả lời
Alexey Ten

Bạn lấy nginx ở đâu? Có lẽ bạn nên gắn bó với một trong bản repo chính thức của Ubuntu. Nó sẽ là 1.10.0, nhưng ít nhất nó sẽ được xây dựng dựa trên phiên bản openssl đúng
Alexey Ten

NGINX đi kèm với bản phân phối Unbfox tôi đã cài đặt từ máy chủ của tôi, Digitalocean, cũng có thể đây là do bản nâng cấp tôi đã thực hiện từ 14.04 đến 16.04. Có vẻ như tôi cần phải xây dựng lại NGINX bằng cách nào đó để giải quyết vấn đề này.
Godwin

Bạn cũng có thể thêm đầu ra của openssl version -a, để chúng tôi có thể xem liệu OpenSSL của bạn đã được xây dựng với bất kỳ cờ / tùy chọn bất ngờ nào không?
Castaglia

@Castaglia, chắc chắn, tôi đã cập nhật câu hỏi.
Godwin

Câu trả lời:


11

Như @AlexyTen đã chỉ ra, nguyên nhân sâu xa là do mặc dù tôi đã cài đặt OpenSSL 1.0.2g, NGINX cần được xây dựng với OpenSSL và nó được xây dựng với 1.0.1f không hỗ trợ ALPN.

NGINX cần được xây dựng lại với OpenSSL 1.0.2 trở lên và được cài đặt lại. Tôi đã tìm thấy một vài hướng dẫn trực tuyến nhưng vì tôi đang sử dụng máy chủ Digital Ocean, tôi đã sử dụng chủ đề trợ giúp này để giải quyết vấn đề cho mình: https://www.digitalocean.com/community/questions/how-to-get-al yet- đã cài đặt-nginx-to-use-openssl-1-0-2-for-alpn

Trước tiên tôi cần cài đặt một vài thư viện mới:

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

Sau đó tôi chỉ chạy tập lệnh này: https://gist.github.com/AJMaxwell/f6793605068813aae888216b02364d85

Tôi khởi động lại bằng cách sử dụng sudo shutdown -r nowvà chạy nginx -Vlại. Lần này nó cho tôi:

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

Tôi cũng đã chạy thử nghiệm http2 của keycdn một lần nữa và nó đã vượt qua.


2

Tôi đã tạo một tập lệnh bash tự động tải xuống, biên dịch và cài đặt Nginx với OpenSSL trên Debian / Ubuntu, RHEL / CentOS và các bản phát hành khác. Hệ nhị phân kết quả hoàn toàn giống với phân phối Nginx thông qua kho lưu trữ chính thức của nó ngoại trừ việc nó đi kèm với phiên bản OpenSSL mới nhất.

Kịch bản không sửa đổi cài đặt OpenSSL, chỉ có nhị phân Nginx. Đó là một lựa chọn tốt nếu bạn không muốn dựa vào các gói được xây dựng và phân phối bởi các nguồn không chính thức.

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


Tại sao không dựa vào các gói bạn tự xây dựng thay vì cài đặt các tệp nhị phân không bị theo dõi?
gà con

1
@chicks Đó là một kịch bản xây dựng Nginx, không phải là nhị phân. Tải về nhị phân từ các nguồn không xác định có thể nguy hiểm, do đó tôi đã tạo ra nó.
Víctor Díaz

1

Cài đặt nginx ppa và nó sẽ hỗ trợ ALPN:

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

1
tốt hơn hết là hda-me/nginx-stablebạn có thể chạy các mô-đun brotli và động
Jacob Evans
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.