Nginx। তালিকাভুক্ত এসএসএল ভার্চুয়াল সার্ভারের অনুরোধ আমি কীভাবে প্রত্যাখ্যান করব?


14

আমার একই আইপিতে একটি ওয়াইল্ডকার্ড এসএসএল শংসাপত্র এবং কয়েকটি সাবডোমেন রয়েছে। এখন আমি চাই যে আমার এনজিনেক্স কেবলমাত্র উল্লিখিত সার্ভারের নামগুলি হ্যান্ডেল করে অন্যের জন্য ড্রপ সংযোগটি যাতে দেখে মনে nginxহয় যে তালিকাভুক্ত সার্ভারের নামগুলির জন্য চলছে না (প্রতিক্রিয়াতে কোনও প্রতিক্রিয়া নয়, প্রত্যাখ্যান করছে, মৃত হবে না)। আমি নিম্নলিখিতটি করি

ssl_certificate         tls/domain.crt;
ssl_certificate_key     tls/domain.key;

server {
  listen 1.2.3.4:443 ssl;
  server_name validname.domain.com;
  //
}

server {
  listen 1.2.3.4:443 ssl;
  server_name _;
  // deny all;
  // return 444;
  // return 404;
  //location {
  //  deny all;
  //}
}

আমি সর্বশেষ সার্ভার ব্লকের প্রায় সবকিছু চেষ্টা করেছি, তবে কোনও সাফল্য পাইনি। আমি হয় জ্ঞাত ভার্চুয়াল সার্ভার বা ত্রুটি কোড থেকে বৈধ প্রতিক্রিয়া পাই। সাহায্য করুন.

উত্তর:


7

এটি সেভাবে কাজ করে না: এইচটিটিপি-র আগে এসএসএল হ্যান্ডশেক হয়, সুতরাং এনজিএনএক্স কনফিগারেশনের মধ্যে আপনাকে পুনর্নির্দেশ করতে বা অন্য কিছু করার আগে শংসাপত্রের নামটি ব্রাউজারে মূল্যায়ন করবে get


এটি খারাপ, তবে স্বীকার করতে হবে) ধন্যবাদ।
andbi

3
এটি সত্য নয়: আপনি নিম্ন স্তরে অন্য কিছু করতে পারেন, যেমন কোনও জবাব ছাড়াই সংযোগ ছেড়ে দেওয়া, যেমন অন্য উত্তরে বর্ণিত।
কলিমার্কো

14

সিজিসির উত্তর ইতিমধ্যে এসএসএল সক্ষম থাকা অবস্থায় হোস্টের নামগুলির সাথে মেলে চেষ্টা করার সাথে সমস্যাটি সঠিকভাবে নির্দেশ করেছে। তবে এটি করা সম্ভব, এটির মতো:

server {
    ...

    if ($host !~* ^validname\.domain\.com$ ) {
        return 444;
    }
    ...
}

দ্রষ্টব্য: হ্যাঁ এটি সত্য যে সাধারণভাবে ifমন্দ , তবে ifএই ক্ষেত্রে এটি ব্যবহার করা নিরাপদ । (আপনার যদি নিজেকে বোঝানোর দরকার হয় তবে লিঙ্কযুক্ত পৃষ্ঠাটি পড়ুন))

বিপরীতে যা পরামর্শ দেওয়া হয়েছে, কেবলমাত্র নিম্নলিখিত ব্লকটি যুক্ত করা কার্যকর হবে না:

server {
    listen 80;
    listen 443 ssl;
    return 444;
}

কারণ কোনও এসএসএল শংসাপত্রের সাথে validname.domain.comমেলে এমন কিছু এলোমেলো ডোমেন নাম মেলে না। আমি এটি চেষ্টা করে দেখেছি, এবং এনজিনেক্স এমন অভিনয় করেছিল যে ব্লকটি মোটেও উপস্থিত ছিল না।

এটিও কাজ করবে না:

server {
    listen       443;
    server_name    _;
    return 444; 
}

কারণ এটি 443 পোর্টে প্রতিটি একক এইচটিটিপিএস সংযোগকে ব্যর্থ করে দেবে, এমনকি এটির মধ্য দিয়ে যাওয়া উচিত। আমি এটিও চেষ্টা করেছি। wgetএকটি এসএসএল হ্যান্ডশেক ত্রুটির কথা জানিয়েছে।


এই উত্তর একেবারে সঠিক। কেবলমাত্র যারা সন্দেহ করেন তাদের জন্য এই বিভাগটি ওয়ার্কিং সার্ভার কনফিগারেশনে যুক্ত করা উচিত। তাই বিষয়টির জন্য স্টার্টার কনফিগারেশনটি সার্ভার হবে {শুনুন 443 এসএসএল; সার্ভার_নাম বৈধ নাম.ডোমেন.কম; যদি ($ হোস্ট! ~ * ^ বৈধ নাম \ .domain \ .com com) 44 444 ফেরত; }}
ইভান ইয়ারেমচুক

6

এখানে বেশিরভাগ উত্তর কেন এটি কাজ করে না, কীভাবে এটি কাজ করে তা নয় ।

এখানে কীভাবে - আপনার যেমন ক্যাচ-অল সার্ভারকে একটি 'ডিফল্ট_সরভার' তৈরি করতে হবে এবং সার্টিফিকেট / কী-তে পাথ সরবরাহ করা প্রয়োজন যাতে এটি আগত এসএসএল অনুরোধটি ডিক্রিপ্ট করে এবং হোস্ট শিরোনামটির সাথে মেলে:

server {
    listen 80 default_server;
    listen 443 ssl default_server;
    server_name _;
    ssl_certificate <path to cert>;
    ssl_certificate_key <path to key>;
    return 404;
}

সেখানে ssl_cerર્ટate / ssl_cerર્ટate_key নোট করুন। যদি সেগুলি নির্দিষ্ট না করা থাকে তবে এনজিনেক্স এখনও এই জাতীয় ডিফল্ট_সার্ভার ব্যবহার করার চেষ্টা করে এবং ব্যর্থ হয় কারণ এটি এসএসএল সংযোগ ডাব্লু / ওএ সার্ট / কী গ্রহণ করতে পারে না। যে কোনও সার্টিফিকেট / কী ব্যবহার করতে পারেন যেমন স্ব স্বাক্ষরিত। ...

একটি স্ব-স্বাক্ষরিত শংসাপত্র তৈরি করতে:

openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365 

এছাড়াও /server//a/841643/87439 দেখুন


1
আপনি কি এই চেষ্টা করেছেন? আপনি কীভাবে একটি SSL শংসাপত্র তৈরি করবেন যা "_" এর একটি সার্ভার নামের সাথে মিলে যায়?
টিম

হ্যাঁ, এই সমাধানটি আমার পক্ষে কাজ করে। আমার ঠিক একই সমস্যা ছিল এবং ডকুমেন্টেশন থেকে অনুভূত হয়েছিল যে এনগিনেক্সের জন্য একটি সার্টি / কী প্রয়োজন কারণ এটি টিএলএস এসএনআইয়ের দিকে তাকায় না। আপনি যে কোনও সার্টি / কী ব্যবহার করতে পারেন, যেমন স্ব-স্বাক্ষরিত।
andreycpp

1

আমি আজ উপরের সমাধানটি কার্যকর করেছি এবং এটি সাঁতার কাটিয়ে কাজ করেছে। সমস্ত ইউআরএল সরিয়ে ফেলা হয়েছে, এখন। প্রকৃত ভার্চুয়াল সার্ভার এন্ট্রি হওয়ার আগে এই সার্ভার কোডটি স্থাপন করা কী ছিল - সমস্ত ম্যাল-রচিত URL এখন এই 'ডিফল্ট' সার্ভারে যায়।

... 
server {
     listen       443;
     server_name    _;
     return 444; }

server {
     listen       443;
     server_name  [URL]

0

আপনার কনফিগারেশনে তালিকাভুক্ত আইটেমকে প্রথম সার্ভার ব্লক করে এমন সার্ভার তৈরি করে আপনি এটি পরিচালনা করতে সক্ষম হবেন।

http {
    ...

    server {
        listen 80;
        listen 443 ssl;
        return 444;
    }

    server {
        server_name validname.domain.com;
        ...
    }
}

বিশেষভাবে চিহ্নিত নয় এমন সমস্ত ডোমেন এই সার্ভার ব্লক দ্বারা পরিচালিত হবে।


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