Apache में TLS 1.1 और 1.2 को कैसे निष्क्रिय करें?


13

मेरे पास एक Ubuntu 12.04.2 LTS सर्वर है जो Apache 2.2.22 पर mod_ssl और OpenSSL v1.0.1 के साथ चल रहा है।

मेरे vhosts कॉन्फिगरेशन में (बाकी सब कुछ जिसके भीतर जैसा मैं उम्मीद करता हूं) वैसा ही व्यवहार करता है, मेरे पास SSLProtocolलाइन है -all +SSLv3

उस कॉन्फ़िगरेशन के साथ, टीएलएस 1.1 और 1.2 सक्षम हैं और सही ढंग से काम करते हैं - जो मेरे लिए काउंटर-सहज है, क्योंकि मैं उम्मीद करता हूं कि केवल एसएसवी 3 को ही उस कॉन्फ़िगरेशन को दिया जाएगा।

मैं TLSv1 को ठीक / अक्षम कर सकता / सकती हूं -/+TSLv1, और यह अपेक्षा के अनुरूप काम करता है। लेकिन +/-TLSv1.1और +/-TLSv1.2मान्य कॉन्फ़िगरेशन विकल्प नहीं हैं - इसलिए मैं उन्हें इस तरह से अक्षम नहीं कर सकता।

जैसा कि मैं ऐसा क्यों करना चाहता हूं - मैं एक तृतीय पक्ष एप्लिकेशन (जिस पर मेरा कोई नियंत्रण नहीं है) के साथ काम कर रहा हूं, जिसमें टीएलएस सक्षम सर्वर के साथ कुछ छोटी-मोटी व्यवहार है, और मुझे आगे बढ़ने के लिए इसे पूरी तरह से अक्षम करने की आवश्यकता है।


जिज्ञासा से बाहर - क्या मैं पूछ सकता हूं कि आप पहले स्थान पर टीएसएल को निष्क्रिय क्यों करना चाहते हैं? मैंने जो इकट्ठा किया है, वह SSLv1 / 2/3 से अधिक सुरक्षित माना जाता है, इसलिए मैं केवल v1.2 और v1.1 की अनुमति देने के कारणों की कल्पना कर सकता हूं (यह मुझे यहां लाया गया है), लेकिन इसे अक्षम करने के लिए नहीं एसएसएल के पक्ष में, पुराने सॉफ्टवेयर के साथ कुछ संगतता मुद्दों को छोड़कर?
कोडिंग

@ कोडिंग पुराने, थर्ड-पार्टी, सॉफ्टवेयर के साथ काम करना, जिसमें टीएलएस के बग हैं।
काइल लोरी

जवाबों:


23

इस बग से प्रेरित होकर (और हां, मैं इसे पुन: पेश करने में सक्षम हुआ) मैंने नवीनतम स्थिर संस्करण के लिए स्रोत कोड पर एक नज़र डाली है mod_sslऔर एक स्पष्टीकरण पाया है। मेरे साथ सहन करें, यह शौकिया-स्टैक-ओवरफ्लोश प्राप्त करने वाला है:

जब SSLProtocolइसे पार्स किया गया है, तो इसका परिणाम charकुछ इस तरह है:

0 1 0 0
^ ^ ^ ^
| | | SSLv1
| | SSLv2
| SSLv3
TLSv1

एक नया सर्वर संदर्भ आरंभ करने पर, सभी उपलब्ध प्रोटोकॉल सक्षम हो जाएंगे, और ऊपर charकुछ निफ्टी बिटवाइड और ऑपरेशन का उपयोग करके यह निर्धारित करने के लिए निरीक्षण किया जाता है कि क्या प्रोटोकॉल अक्षम होना चाहिए । इस मामले में, जहां SSLv3 एकमात्र प्रोटोकॉल है जिसे स्पष्ट रूप से सक्षम किया गया है, 3 अन्य को अक्षम कर दिया जाएगा।

OpenSSL TLSv1.1 के लिए एक प्रोटोकॉल सेटिंग का समर्थन करता है, लेकिन चूंकि SSLProtocolइस विकल्प के लिए खाता नहीं है, यह कभी भी अक्षम नहीं होता है। OpenSSL v1.0.1 के पास TLSv1.2 के साथ कुछ ज्ञात मुद्दे हैं, लेकिन अगर यह समर्थित है तो मुझे लगता है कि TLSv1.1 के लिए भी वही होगा; यह mod_ssl द्वारा मान्यताप्राप्त / नियंत्रित नहीं है और इस तरह कभी भी अक्षम नहीं हुआ है।

Mod_ssl के लिए स्रोत कोड संदर्भ:

SSLProtocol925 पर लाइन में पार्स pkg.sslmod/ssl_engine_config.c
किया जाता है। उपरोक्त फ़ंक्शन में उपयोग किए गए विकल्पों को लाइन 444 में परिभाषित किया गया है। इसके बाद pkg.sslmod/mod_ssl.h
सभी प्रोटोकॉल 586 में सक्षम हो जाते हैं, pkg.sslmod/ssl_engine_init.cइसके बाद विशिष्ट प्रोटोकॉल बाद की तर्ज पर अक्षम हो जाते हैं।

फिर इसे निष्क्रिय कैसे करें?

आपके पास कुछ विकल्प हैं:

  1. इसे OpenSSL कॉन्फिग फ़ाइल में अक्षम करें:
    Protocols All,-TLSv1.1,-TLSv1.2
  2. पुनः mod_ssl;-)

एक सही उत्तर की तरह लगता है, बस सत्यापित करने की आवश्यकता है: कौन सी / क्या / जहां ओपनएसएसएल कॉन्फिग फाइल?
काइल लोरी

openssl.cnf- स्थान इंस्टॉल पर निर्भर करता है। डेबियन निचोड़ पर /etc/ssl/openssl.cnf, मैं इसे ओएस एक्स में /System/Library/OpenSSL/openssl.cnfऔर विंडोज 7 पर पर पाया %systemdrive%\openssl\openssl.cnf
मथियास आर। जेसेन

1
अब मैं config फाइल देख रहा हूं; वाक्यविन्यास आपके उत्तर के आधार पर जो मैं अपेक्षा करता हूं, उससे थोड़ा अलग है, और मुझे ऑनलाइन कुछ भी नहीं मिल रहा है जो स्पष्ट रूप से बताता है कि आप उस प्रोटोकॉल को नियंत्रित कर सकते हैं जो उस कॉन्फ़िगरेशन फ़ाइल से सक्षम / अक्षम हैं। क्या आपके पास इसके लिए कोई संदर्भ है? धन्यवाद।
काइल लोरी

एक अन्य विकल्प - उपयोग: SSLProtocolऊपर एक ही तरीके से ( SSLProtocol All -TLSv1.1 -TLSv1.2(कोई अल्पविराम की आवश्यकता नहीं होनी चाहिए) लेकिन एक वैश्विक या विशिष्ट अपाचे विन्यास के तहत ऊपर उल्लिखित किसी भी एसएसएल वैश्विक कॉन्फ़िगरेशन को 'ओवरराइड' करने के लिए। (यदि आप सभी अंतर्निहित एसएसएल सिफर को बदलना नहीं चाहते हैं -> चूंकि सिफर की आपको जरूरत है, तो इसे कमजोर माना जाता है।)
bshea

2

इस मुद्दे को mod_ssl अपाचे पृष्ठ पर टिप्पणियों पर भी संबोधित किया गया है: http://httpd.apache.org/docs/2.2/mod/mod_ssl.html#comment_1136

अगर Ubuntu 12.04 में Apache 2.2.23 होता, तो समस्या नहीं होती। टिप्पणियों के अनुसार, TLSv1.1 और TLSv1.2 को सक्षम करना संभव है, लेकिन TLSv1.0 को तब भी सक्षम किया गया है:

SSLProtocol All -SSLv2 -SSLv3

1

सबसे पहले, आपको यह पहचानना होगा कि आपके सर्वर में पोर्ट 443 के लिए डिफ़ॉल्ट vhost क्या है (Apache द्वारा लोड किया गया पहला SSL vhost) और इसे कॉन्फ़िगरेशन फ़ाइल संपादित करें। अधिकांश उपयोगकर्ताओं के पास सर्वरों में ssl.conf फाइल होती है, जिसमें पोर्ट 443 के लिए एक vhost होता है, जिसे वहां कॉन्फ़िगर किया गया है। जैसा कि इस फ़ाइल का नाम "s" से शुरू होता है, यह vhosts.conf (जो "v" से शुरू होता है) में कॉन्फ़िगर किए गए vhosts से पहले लोड होगा। तो, जांचें कि क्या यह आपका मामला है (उत्तर लगभग सभी के लिए "हां" है) और उस फ़ाइल में प्रोटोकॉल बदलें । बस काफी है!

इसी तरह का एक मुद्दा यहां पोस्ट किया गया था: अपाचे में टीएलएस 1.1 और 1.2 को अक्षम कैसे करें? । HBruijn के अनुसार:

जब तक आपके पास IP VirtualHosts नहीं है, व्यवहार में SSLProtocol निर्देश की पहली घटना से सेटिंग पूरे सर्वर और / या सभी नाम-आधारित VirtualHosts के लिए उपयोग किया जाता है जो TLS का समर्थन करते हैं

और यहां एक और: क्या एक वर्चुअलहॉस्ट (पुडल) के लिए अपाचे में एसएसपीप्रोटोकॉल सेट करना संभव है? । वल्लिस्मॉर्टिस के अनुसार:

आप SSLProtocol को केवल पहले वर्चुअलहॉस्ट के लिए कॉन्फ़िगरेशन फ़ाइल में सेट कर सकते हैं। सभी बाद की VirtualHost प्रविष्टियाँ विरासत में मिलेंगी जो पहली प्रविष्टि से सेटिंग करती हैं और एक OpenSSL बग के कारण चुपचाप अपनी स्वयं की सेटिंग को अनदेखा कर देती हैं।

वैसे: किसी दिए गए पोर्ट के लिए सर्वर में डिफ़ॉल्ट vhost, वह है जो उस पोर्ट के अनुरोधों का जवाब देता है, जो सर्वर पर बिना सर्वर के पहचान के (या गलत सर्वर नाम के साथ) पहुंचते हैं। उदाहरण: आपके ब्राउज़र के एड्रेस बार में टाइप किया गया एक IP या गलत DNS टेबल के कारण एक गलत रीडायरेक्ट।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.