ALPN मेरे सर्वर द्वारा समर्थित क्यों नहीं है?


11

मैं वर्तमान में NGINX 1.11.9 और Opensl 1.0.2g का उपयोग करके एक Ubuntu 16.04.1 LTS सर्वर चला रहा हूं।

मेरे द्वारा पढ़ी गई सभी चीज़ों के अनुसार, इन संस्करणों को ALPN का समर्थन करना चाहिए, फिर भी जब मैं KeyCDN के HTTP / 2 टेस्ट टूल पर परीक्षण चलाता हूं, तो मुझे "ALPN समर्थित नहीं है"की-स्क्रीन टेस्ट रिपोर्ट की स्क्रीन कैप्चर

और जब मैं निष्पादित करता echo | openssl s_client -alpn h2 -connect example.com:443 | grep ALPNहूं, मुझे मिलता है:

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 सक्षम नहीं होने से HTTP2 पूरी तरह से सक्षम होने से अक्षम हो जाता है। मैं ALPN को कैसे सक्षम करूं?

संपादित करें

nginx -V दिखाता है:

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 उत्पादन:

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- लगता है कि जवाब है
एलेक्सी टेन

आपका नगीन कहाँ से मिला? संभवतः आपको उस एक के साथ रहना चाहिए जो आधिकारिक ubuntu repo में है। यह १.१०.० होगा, लेकिन कम से कम इसे ओपनसेल के सही संस्करण के खिलाफ बनाया जाएगा
एलेक्सी टेन

NGINX Unbuntu distro के साथ आया था जिसे मैंने अपने होस्ट, Digitalocean से स्थापित किया था, यह भी संभव है कि यह उस अपग्रेड के कारण है जो मैंने 14.04 से 16.04 तक किया था। ऐसा लगता है जैसे मुझे इसे हल करने के लिए NGINX को किसी तरह से पुनर्निर्माण करने की आवश्यकता है।
गॉडविन

क्या आप इसका आउटपुट भी जोड़ openssl version -aसकते हैं, ताकि हम देख सकें कि क्या आपका ओपनएसएसएल किसी अप्रत्याशित झंडे / विकल्प के साथ बनाया गया था?
Castaglia

@ कस्तलगलिया, निश्चित रूप से, मैंने सवाल अपडेट किया।
गोडविन

जवाबों:


11

जैसा कि @AlexyTen ने बताया, मूल कारण यह था, हालांकि मेरे पास OpenSSL 1.0.2g स्थापित था, NGINX को OpenSSL के साथ बनाने की आवश्यकता थी और यह 1.0.1f के साथ बनाया गया था जो ALPN का समर्थन नहीं करता है।

NGINX को ओपनएसएसएल 1.0.2 या इसके बाद के संस्करण के साथ फिर से स्थापित करने की आवश्यकता है। मुझे कुछ ट्यूटोरियल ऑनलाइन मिले, लेकिन क्योंकि मैं एक डिजिटल ओशन सर्वर का उपयोग कर रहा हूं, इसलिए मैंने इस मुद्दे को हल करने के लिए इस मदद विषय का उपयोग किया: https://www.digitalocean.com/community/questions/how-to-get-already- स्थापित-nginx के लिए उपयोग-openssl-1-0-2 के लिए alpn

मुझे पहले कुछ नए पुस्तकालय स्थापित करने की आवश्यकता थी:

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

मैंने तब यह स्क्रिप्ट चलाई थी: https://gist.github.com/AJMaxwell/f6793605068813aae888216b02364d85

मैंने उपयोग करना फिर से शुरू किया sudo shutdown -r nowऔर nginx -Vफिर से भाग गया। इस बार इसने मुझे दिया:

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

मैंने की-बोर्ड की http2 टेस्ट को भी फिर से चलाया और यह पास हो गया।


2

मैंने एक बैश स्क्रिप्ट बनाई है जो स्वचालित रूप से डाउनलोड, संकलन और ओपनएसएसएल के साथ डेबियन / उबंटू, आरएचईएल / सेंटोस और अन्य डिस्ट्रोस पर नगनेक्स स्थापित करती है। परिणामी बाइनरी बिल्कुल वैसा ही है जैसा कि नग्नेक्स को अपने आधिकारिक भंडार के माध्यम से वितरित करता है सिवाय इसके कि यह ओपनएसएसएल के नवीनतम संस्करण के साथ आता है।

स्क्रिप्ट ओपनएसएसएल इंस्टॉलेशन को संशोधित नहीं करता है, केवल नेग्नेक्स बाइनरी। यह एक अच्छा विकल्प है यदि आप अनौपचारिक स्रोतों द्वारा निर्मित और वितरित पैकेजों पर भरोसा नहीं करना चाहते हैं।

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


क्यों न आप उन पैकेजों पर भरोसा करें, जो आपने अनकहा बायनेरिज़ को स्थापित करने के बजाय खुद का निर्माण किया है?
चूजों

1
@chicks यह एक स्क्रिप्ट है जो Nginx बनाता है, न कि बाइनरी। अज्ञात स्रोतों से बायनेरी डाउनलोड करना खतरनाक हो सकता है, इसलिए मैंने इसे बनाया है।
विक्टर डिआज़

1

Nginx ppa स्थापित करें और यह ALPN को सपोर्ट करेगा:

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

1
इससे बेहतर है hda-me/nginx-stableकि आप ब्रेटली और गतिशील मॉड्यूल चला सकते हैं
जैकब इवांस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.