एसएसएल हैंडशेकिंग करते समय एसएसएल पोर्ट पर सुनने वाले सर्वर में एसएसएल और एनग्निक्स: नो "एसएसएल_ सर्टिफिकेट" को परिभाषित किया गया है


23

मैं बिना किसी त्रुटी के ले के साथ अपने प्रमाण पत्र बनाने में कामयाब रहा, मैंने भी पोर्ट 80 से पोर्ट 443 पर अपने ट्रैफ़िक को पुनर्निर्देशित करने में कामयाबी हासिल की है। लेकिन जब मैं अपना नगनेक्स सर्वर पुनः लोड करता हूँ तो मैं अपनी वेबसाइट तक पहुँचने में असमर्थ होता हूँ। Ngnix त्रुटि लॉग इस लाइन को दिखाता है:

4 no "ssl_certificate" is defined in server listening on SSL port while SSL handshaking, client: 192.168.0.104, server: 0.0.0.0:443

मुझे लगता है कि इसका मतलब है कि यह उन प्रमाणपत्रों को नहीं पा सकता है जिन्हें मैंने तब प्रमाणपत्रों के मार्ग पर नेविगेट किया था और वे दोनों वहां हैं, क्या समस्या हो सकती है? यहाँ मेरा Ngnix विन्यास कैसा दिखता है:

server {
       listen         80;
       server_name    pumaportal.com www.pumaportal.com;
       return         301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;

    server_name pumaportal.com www.pumaportal.com;

    add_header Strict-Transport-Security "max-age=31536000";

    ssl_certificate /etc/letsencrypt/live/pumaportal.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/pumaportal.com/privkey.pem;

    ssl_stapling on;
    ssl_stapling_verify on;

    access_log /var/log/nginx/sub.log combined;

    location /.well-known {
       alias /[MY PATH]/.well-known;
    }

    location / {
        proxy_pass http://localhost:2000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header X-Forwarded-For $remote_addr;
    }

}

यह सब बहुत सीधा लगता है मुझे समझ नहीं आ रहा है कि समस्या कहाँ हो सकती है।

Nginx -t चलाने के बाद यह सब ठीक लगता है:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

क्या आपके पास कोई अन्य serverब्लॉक है? जब आपको वह त्रुटि मिली तो आपने वास्तव में क्या किया?
तेरो किलकेनन

1
क्या nginx उपयोगकर्ता के पास प्रमाणपत्र फ़ाइल और कुंजी फ़ाइल तक पहुंच है? यह फाइलों तक पढ़ने के लिए पर्याप्त नहीं है, उपयोगकर्ता को श्रृंखला में सभी निर्देशिकाओं के लिए फ़ाइल को पढ़ने और निष्पादित करने की भी आवश्यकता है।
जेनी डी का कहना है कि मोनिका

जवाबों:


25

मेरा अनुमान है कि आपके पास एक और सर्वर है जो पोर्ट 443 पर सुन रहा है। इस सर्वर में ssl_certificate परिभाषित नहीं है, और यह स्वचालित रूप से चयनित (SNI) है। / Etc / nginx / साइट्स से सभी प्रतीकात्मक लिंक को हटाने का प्रयास करें-इस सर्वर को छोड़कर जिसे आप कार्य करना चाहते हैं (यदि यह संभव है, अन्यथा सही ढंग से कॉन्फ़िगर किए बिना 443 सुनने के लिए अपने सभी सर्वरों की जांच करें)।


2
बिंगो! मेरे मामले में, मैं vhost mail.mydomain के लिए कॉन्फिग फाइल बनाता हूं, इसलिए मैं अपने डवकोट इंस्टॉलेशन के लिए LE सर्टिफिकेट बना सकता हूं और कॉन्फिग फाइल में जोड़ना भूल सकता हूं।
मार्कोस रेजिस

7

मैंने आज सुबह ही इस समस्या को ठीक कर लिया है, इसलिए मैं यहाँ CA के बिंदु को स्पष्ट करने के लिए हूँ (जो, अब कि मैं समस्या को समझता हूँ, अच्छी तरह से बनाया गया था), आपको सबसे अधिक दो सर्वर ब्लॉक होने की संभावना है:

# चूक
सर्वर {
    443 default_server सुनें; # `Ssl` की कमी पर ध्यान दें
    सर्वर का नाम _;
    # ...
}

# असली साइट
सर्वर {
    443 एसएसएल सुनो;
    सर्वर का नाम ;
    # ...
}

एसएनआई केवल उन लोगों से मेल खाएगा जो एक sslश्रोता के साथ लेबल किए जाते हैं । हालाँकि, डिफ़ॉल्ट सर्वर 443 पर सभी आवक ट्रैफिक को पकड़ लेगा , भले ही एसएसएल या नहीं। इसलिए, यह वास्तव में स्वयं के लिए यातायात के सभी जमाखोरी से, बल्ले से सही, वास्तव में काम कर रहे एसएनआई को पहले से बता रहा है।

लक्षण:

  • ऐसा लगेगा जैसे नगनेक्स आपके कॉन्फिगरेशन को लोड नहीं कर रहा है (यहां तक ​​कि nginx -tसर्विस लोड के साथ भी )
  • "सर्वर में कोई ssl_certificate नहीं मिला" बताते हुए त्रुटियां
  • nginx केवल अपने होस्ट को डिफ़ॉल्ट 443 श्रोता पर लागू कर रहा है।

समाधान की:

मैंने डिफ़ॉल्ट सर्वर ब्लॉक को हटाकर आज सुबह समस्या को ठीक किया, इसलिए एसएनआई को एसएसएल श्रोताओं पर मिलान करने की अनुमति दी।

वैकल्पिक समाधान sslश्रोता और ssl_certificateलाइनों को सर्वर ब्लॉक में जोड़ना होगा ताकि SNI आपके डिफ़ॉल्ट होस्ट पर अनिवार्य रूप से सक्षम हो। आपको अभी भी एसएसएल त्रुटियाँ मिलेंगी, इसलिए यह सबसे अच्छा समाधान नहीं है, लेकिन यह आपके एसएनआई को काम करने देगा :)


5

आपको default_servernginx config में एक एकल पैरामीटर को परिभाषित करने की आवश्यकता है ।

default_serverExample.com या www.example.com पर लागू करें । दोनों नहीं।

इसलिए यह काम करेगा:

server {
    listen 443 ssl;
    listen 80;

    server_name example.com;
    return 301 https://www.example.com$request_uri;
}

server {
    listen 80 default_server;

    server_name www.example.com;
    return 301 https://www.example.com$request_uri;
}

server {
    listen 443 ssl default_server;

    server_name www.example.com;
    root /var/www/example.com/public;
    index index.php index.html index.nginx-debian.html;

    ssl on;
    ssl_certificate /etc/ssl/chain.crt;
    ssl_certificate_key /etc/ssl/examplecom.key;

    (rest of your nginx config goes here....)
}

वर्चुअल होस्ट पर ध्यान दें: सुनिश्चित करें कि default_serverपैरामीटर कहीं और परिभाषित नहीं है - यदि आपके पास सर्वर पर कई होस्ट हैं।


बहुत अच्छा एसएसएल मेरे लिए काम कर रहा है
जोसुआ मार्सेल क्रिसानो

1

हमेशा की तरह खेल में देर हो गई, लेकिन चूंकि इससे मुझे मदद मिली ... जाँच करें कि क्या प्रमाणपत्र विकृत है। जब "एकीकृत" crt (crt + मध्यवर्ती) का निर्माण, कर रहे हैं

$cat server.crt provider.intermediate > unified.crt

मैं किसी तरह एक LF खो दिया है और इस तरह एक लाइन मिल गया है:

-----END CERTIFICATE----------BEGIN CERTIFICATE-----

के बजाय

-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----

और nginx प्रमाणित नहीं होगा और ऊपर उल्लिखित त्रुटि के साथ विफल हो जाएगा।

करते हुए

# openssl x509 -in unified.cert -text -out

मुझे खुलने के लिए सुराग दिया है त्रुटि होगी।


-1

जांच लें कि प्रमाणपत्रों के लिए आपकी फ़ाइल अनुमति सही है या नहीं। कृपया निर्देशिका लिस्टिंग ( ls -la) पोस्ट करें

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