NGINX में TLS 1.0 को अक्षम करें


22

मेरे पास हमारी साइटों के लिए एक विपरीत प्रॉक्सी के रूप में एक NGINX अभिनय है और बहुत अच्छा काम कर रहा है। उन साइटों के लिए जिन्हें ssl की आवश्यकता है, मैंने raymii.org का अनुसरण करते हुए यह सुनिश्चित करने के लिए कि SSLLabs स्कोर को यथासंभव मजबूत बनाया है। साइटों में से एक को PCI DSS के अनुरूप होने की आवश्यकता है लेकिन नवीनतम TrustWave स्कैन के आधार पर अब TLS 1.0 सक्षम होने के कारण विफल हो रहा है।

Nginx.conf में http स्तर पर:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

मेरे पास विशिष्ट सर्वर के लिए:

ssl_protocols TLSv1.1 TLSv1.2;

मैंने सिफर्स को बदल दिया है, चीजों को http स्तर से और प्रत्येक ssl साइट सर्वर पर स्थानांतरित कर दिया है, लेकिन कोई फर्क नहीं पड़ता कि मैं क्या चलाता हूं:

openssl s_client -connect www.example.com:443 -tls1

मुझे टीएलएस 1.0 के लिए वैध कनेक्शन मिलता है। SSLLabs साइट के लिए nginx सेटअप को A के रूप में रखता है, लेकिन TLS 1.0 के साथ इसलिए मेरा मानना ​​है कि मेरा बाकी सेटअप सही है, यह केवल TLS 1.0 को बंद नहीं करेगा।

क्या मैं लापता हो सकता है पर विचार?

openssl version -a
OpenSSL 1.0.1f 6 Jan 2014
built on: Thu Jun 11 15:28:12 UTC 2015
platform: debian-amd64

nginx -v
nginx version: nginx/1.8.0

1
ध्यान दें कि यह अनिवार्य TLS 1.0 दूर करने के लिए 30 जून, 2016 तक नहीं है
माइकल हैम्पटन

जवाबों:


12

यहां समस्या यह है कि ए Server name indication टीएलएस वार्ता का हिस्सा कनेक्शन के बाद ही बातचीत के बाद किया जाता है। और प्रोटोकॉल को कनेक्शन बातचीत के दौरान बातचीत की जाती है।

यदि आप उस वर्चुअल होस्ट को उस सर्वर पर IP पते पर कॉन्फ़िगर करते हैं, जिसके साथ कोई अन्य वर्चुअल होस्ट संबद्ध नहीं है, तो उस वर्चुअल होस्ट के लिए कोई TLS v1.0 लागू करना संभव हो सकता है। इसलिए nginx आईपी पते के आधार पर पता होगा कि कोई TLS v 1.0 की अनुमति नहीं है।


धन्यवाद। मैं इसके आसपास कोई रास्ता नहीं मान रहा हूं क्योंकि हमारे पास परीक्षण करने के लिए इस समय एक अतिरिक्त आईपी नहीं है।
शॉन सी।

1
Server Name Indicationटीएलएस का हिस्सा है ClientHello। यह क्लाइंट द्वारा भेजे गए पहले संदेश में है, और बाद में बातचीत नहीं की गई है। ऐसा लगता है कि Nginx में एक डिजाइन दोष है। ऐसा लगता है कि यह कनेक्शन स्वीकार करता है, और फिर वर्चुअल होस्ट के लिए आगे कि क्या इसका सही या गलत है। इसके बजाय, nginx को सर्वर नाम को पार्स करना चाहिए, वर्चुअल होस्ट से परामर्श करना चाहिए और फिर वर्चुअल होस्ट की आवश्यकताओं को पूरा करने में विफल होने पर कनेक्शन को अस्वीकार कर देना चाहिए। टीएलएस 1.0 के कई बार संदिग्ध होने के बाद से डिज़ाइन दोष शायद सीवीई के योग्य है। इसका स्पष्ट रूप से कुछ परिस्थितियों में सी एंड ए उल्लंघन है।

टिप्पणी के लिए धन्यवाद। यह दिलचस्प है अगर यह वास्तव में एक वास्तविक डिजाइन दोष है।
तेरो किल्केन

1
क्या यह 2019 में नए nginx संस्करणों के साथ अपरिवर्तित है?
रोज़

18

एक सर्वर ब्लॉक ढूंढें जिसे आप अपने "डिफ़ॉल्ट" एसएसएल वार्ता टेम्पलेट के रूप में उपयोग करना चाहते हैं। अपनी सुनने की लाइन खोजें

server {
    ...
    listen 443 ssl;
    ssl_protocols TLSv1.1 TLSv1.2;
    ...
}

और default_serverलाइन के अंत में जोड़ें

server {
    ...
    listen 443 ssl default_server;
    ssl_protocols TLSv1.1 TLSv1.2;
    ...
}

यह nginx को कॉन्फ़िगरेशन के लिए अनुमति देता है जब यह बातचीत कर रहा है कि कौन सा TLS संस्करण का उपयोग करना है। नकारात्मक पक्ष यह है कि आपके पास प्रति पोर्ट केवल एक डिफ़ॉल्ट सर्वर हो सकता है। इसलिए TLSv1 के साथ कुछ वर्चुअल डोमेन को सक्षम किया गया है और इसके साथ अन्य लोग अक्षम हैं कोई नहीं है।


क्या इसका मतलब यह है कि केवल एक ही स्थान है जहां ssl_protocolls का प्रभाव पड़ता है? सर्वर कॉन्फ़िगरेशन के भीतर जो default_server घोषणा है? जब इस कॉन्फ़िगरेशन का उपयोग बातचीत के दौरान किया जाता है, तो दूसरे कॉन्फ़िगरेशन में सेटिंग ssl_protocolls का प्रभाव नहीं होता है?
रोज़

4

मैंने nnxx संस्करण 1.8.1 पर TLSv1 को अक्षम कर दिया है। आपको खुलने के समय को 1.0.1g या 1.0.1h संस्करणों में अपडेट करना होगा। फिर बस ssl_protocols निर्देश से 'TLSv1' निकालें:

ssl_protocols TLSv1.1 TLSv1.2

फिर कमांड द्वारा TLSv1 के माध्यम से कनेक्शन की जाँच करें:

openssl s_client -tls1 -connect example.com:443 < /dev/null

आपको कुछ ऐसा मिलना चाहिए:

CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 0 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1
    Cipher    : 0000
    Session-ID: 
    Session-ID-ctx: 
    Master-Key: 
    Key-Arg   : None
    Krb5 Principal: None
    PSK identity: None
    PSK identity hint: None
    Start Time: 1474531027
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
---

1
जब वे होस्ट किए गए वातावरण में होते हैं तो फोल्क्स आमतौर पर ओपनएसएसएल के संस्करण को प्रतिस्थापित नहीं कर सकते हैं। सर्वर ऑपरेटर सर्वर के कॉन्फ़िगरेशन को नियंत्रित करता है; वह वेबसाइट ऑपरेटर नहीं जो वर्चुअल सर्वर को किराए पर दे रहा है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.