Nginx / SNI: यदि किसी समान IP पर होस्ट किए गए विशिष्ट डोमेन के लिए कोई प्रमाण पत्र उपलब्ध नहीं है, तो 444 वापस लौटें


2

मैं SSL और SNI समर्थन के बारे में nginx को कॉन्फ़िगर करने के साथ फंस गया हूं।

मेरे मामले को सरल बनाने के लिए, मान लें कि मेरे पास दो डोमेन हैं, foo.comऔर bar.com। मेरे पास केवल एक आईपी है और दोनों डोमेन इस पर मैप किए जाते हैं। मैं के foo.comमाध्यम से उपलब्ध होना चाहता हूं https, लेकिन नहीं bar.com। बाद वाला बस पोर्ट 443 पर अनुपलब्ध होना चाहिए। मुझे पता है कि यह सादे एसएसएल के साथ संभव नहीं है, लेकिन मुझे बताया गया था कि मैं इन दिनों एसएनआई पर सुरक्षित रूप से भरोसा कर सकता हूं। इसलिए मुझे लगता है कि मेरा ब्राउज़र (क्रोम) उस वेबसाइट के डोमेन को भेजता है जो एसएसएल इनिट अनुरोध के साथ एक्सेस करना चाहता है।

यदि मैं bar.comपहुंचता हूं , तो nginx के लिए जारी किए गए कॉन्फ़िगर किए गए प्रमाणपत्र का उपयोग करता है bar.com, एकदम सही। यदि मैं पहुंचता हूं https://foo.com, जिसके लिए कोई listen *:443निर्देश वास्तव में मौजूद नहीं है, तो nginx भी प्रमाण पत्र के साथ उत्तर देता है bar.com, इस प्रकार क्रोम एक प्रमाणपत्र अपवाद को फेंक देता है। मैंने SSL सुनने के निर्देश को कॉन्फ़िगर करने का प्रयास किया foo.comऔर बिना किसी सफलता के साथ vhost में निम्नलिखित कोड जोड़ा:

if ($server_port = 443) {
  return 444;
}

यह अब गलत प्रमाणपत्र भेजता है और केवल बाद में कनेक्शन से इनकार करता है।

क्या यह संभव है कि किसी भी SSL उत्तर को ब्राउज़र में वापस भेजने से पहले nginx को कनेक्शन बंद कर दिया जाए अगर nginx को अनुरोधित डोमेन के लिए एक उपयुक्त प्रमाणपत्र नहीं मिल सकता है?


टीएलएस सत्र का अनुरोध किए जाने के बाद, इसे इनायत से इनकार करना संभव नहीं है।
डैनियल बी

खैर, मैं इसे इनायत से इनकार नहीं करना चाहता। बस कनेक्शन गिरा दो।
क्रेथ

जवाबों:


0

Nginx पहले उपयुक्त (पोर्ट और ssl उपस्थिति द्वारा) वर्चुअल होस्ट का उपयोग करता है जब वह दिए गए डोमेन के लिए वर्चुअल होस्ट नहीं ढूँढ सकता। आपको अन्य सभी server {}प्रविष्टियों से पहले एक प्रविष्टि जोड़ने की आवश्यकता है server {}ताकि Nginx https://foo.comअज्ञात डोमेन के साथ अन्य HTTPS अनुरोधों के लिए इसका उपयोग करे :

server {
    listen 443 ssl;

    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/certificate.key;

    return 404;
    # or return 444; to just drop such connections
    # or return 302 http://$host$request_uri; to redirect them to HTTP
}

इसे काम करने के लिए एक SSL प्रमाणपत्र की आवश्यकता होती है लेकिन आप एक स्व-हस्ताक्षरित जनरेट कर सकते हैं (प्रमाण पत्र को मान्य होने की आवश्यकता नहीं है)।

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