এসএসএল এবং এনগনিক্স: এসএসএল হ্যান্ডশেক করার সময় কোনও এসএসএল_সার্টিফাইটি এসএসএল পোর্টে সার্ভারে সংজ্ঞায়িত করা হয়নি


23

আমি ত্রুটি না করেই এলই দিয়ে আমার শংসাপত্র তৈরি করতে পরিচালিত হয়েছি, আমি আমার ট্র্যাফিকটি পোর্ট ৮০ থেকে পোর্ট ৪৪৩ এ পুনর্নির্দেশ করতেও সক্ষম হয়েছি But তবে আমি যখন আমার এনজিএনএক্স সার্ভারটি পুনরায় লোড করি তখন আমি আমার ওয়েবসাইটে অ্যাক্সেস করতে পারিনি। 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

আমি মনে করি এর অর্থ এই যে এটি শংসাপত্রগুলি খুঁজে পাচ্ছে না আমি পরে শংসাপত্রগুলির পথে নেভিগেট করেছি এবং তারা উভয়ই সেখানে আছে, সমস্যা কী হতে পারে? এখানে আমার এনগনিক্স কনফিগারেশনটি কেমন দেখাচ্ছে:

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 চালানোর পরে - এটি সব ঠিক আছে বলে মনে হচ্ছে:

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 পোর্টে আপনার আর একটি সার্ভার শোনা যাচ্ছে This এই সার্ভারটির কোনও ssl_cerર્ટate সংজ্ঞায়িত হয়নি, এবং এটি স্বয়ংক্রিয়ভাবে নির্বাচিত হয়েছে (এসএনআই)। আপনি যে কোনও একটি সার্ভারটি কাজ করতে চান তা বাদ দিয়ে / ইত্যাদি / এনগিনেক্স / সাইট-সক্ষম থাকা সমস্ত প্রতীকী লিঙ্কগুলি মুছে ফেলার চেষ্টা করুন (যদি এটি সম্ভব হয় তবে অন্যথায় সঠিকভাবে কনফিগার না হয়ে 443 শোনার জন্য আপনার সমস্ত সার্ভার চেক করুন)।


2
লোটোখেলা! আমার ক্ষেত্রে, আমি vhost mail.mydomain এর জন্য কনফিগার ফাইল তৈরি করি, তাই আমি আমার ডোভকোট ইনস্টলেশনটির জন্য একটি এলই সার্টিফিকেট তৈরি করতে পারি এবং কনফিগ ফাইলটিতে যুক্ত করতে ভুলে গিয়েছি।
মার্কোস রেজিস

7

আমি আজ সকালে এই একই সমস্যাটি সমাধান করেছিলাম, সুতরাং আমি এখানে সিএ এর বিষয়টি স্পষ্ট করতে এখানে এসেছি (যা এখন আমি বুঝতে সমস্যাটি বেশ ভালভাবে তৈরি হয়েছিল), আপনার সম্ভবত দুটি সার্ভার ব্লক রয়েছে:

# ডিফল্ট
সার্ভার
    শুনুন 443 ডিফল্ট_সার্ভার; # S ssl` এর অভাব নোট করুন `
    সার্ভার নাম _;
    # ...
}

# রিয়াল সাইট
সার্ভার
    শুনুন 443 এসএসএল;
    সার্ভার নাম ;
    # ...
}

শ্রোতাদের সাথে লেবেলযুক্ত কেবল তাদের সাথে এসএনআই মিলবে ssl। যাইহোক, ডিফল্ট সার্ভারটি এসএসএল বা না নির্বিশেষে 443 এ সমস্ত আগত ট্র্যাফিক দখল করবে । অতএব, এটি নিজের জন্য সমস্ত ট্র্যাফিক সংগ্রহ করে, সরাসরি ব্যাট থেকে ডানদিকে কাজ করা থেকে এসএনআইকে প্রকট করে।

লক্ষণ:

  • দেখে মনে হবে এনজিনেক্স আপনার কনফিগারেশন লোড করছে না (এমনকি nginx -tকোনও পরিষেবা পুনরায় লোড দিয়েও )
  • "সার্ভার ব্লকে কোনও এসএসএল_সেসিফেট পাওয়া যায়নি" উল্লেখ করে ত্রুটিগুলি
  • nginx কেবলমাত্র আপনার হোস্টটিকে ডিফল্ট 443 শ্রোতার কাছে প্রয়োগ করছে।

সলিউশন:

আমি আজ সকালে ডিফল্ট সার্ভার ব্লকটি সরিয়ে এই সমস্যাটি সমাধান করেছি, সুতরাং এসএনআইকে এসএসএল শ্রোতার সাথে মেলে।

বিকল্প সমাধান হ'ল sslশ্রোতা এবং ssl_certificateসার্ভার ব্লকে লাইনগুলি যুক্ত করা যাতে এসএনআই মূলত আপনার ডিফল্ট হোস্টে সক্ষম হয়। আপনি এখনও এসএসএল ত্রুটি পাবেন, সুতরাং এটি সেরা সমাধান নয়, তবে এটি আপনার এসএনআইকে কাজ করতে দেবে :)


5

আপনাকে default_serverএনজিএনএক্স কনফিগারেশনে একটি একক প্যারামিটার নির্ধারণ করতে হবে ।

default_serverউদাহরণ.কম বা 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

আমি একরকম একটি এলএফ হারিয়েছি এবং এর মতো একটি লাইন পেয়েছি:

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

পরিবর্তে

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

এবং nginx শংসাপত্র গ্রহণ করবে না এবং উপরে উল্লিখিত ত্রুটিটি ব্যর্থ করবে।

এরকম

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

ওপেনসেলের জন্য ক্লুটি ত্রুটিযুক্ত হয়ে উঠবে।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.