আমি এনজিএনএক্স ব্যবহার করে কীভাবে একাধিক সাবডোমেন তাদের নিজস্ব শংসাপত্র দিয়ে সেটআপ করব?


8

যতক্ষণ না আমি পড়েছি প্রতিটি উত্তর স্পষ্টত ভুল ছিল না, এসএনআইয়ের উচিত আমি যা চাই তা করা সম্ভব করে দেওয়া উচিত, তবুও প্রতিটি গাইড আমাকে ঠিক কী করতে বলছেন তা করতে বলে।

এবং এখনও nginx ভুল শংসাপত্র পরিবেশন করা হয় তাই আমি স্পষ্টত কিছু ভুল করছি।

❯ sudo nginx -V | grep SNI                                                                                                                                                                                                                                                            %1
nginx version: nginx/1.10.3
built with OpenSSL 1.1.0f  25 May 2017
TLS SNI support enabled
configure arguments: --with-cc-opt='-g -O2 -fdebug-prefix-map=/build/nginx-qJwWoo/nginx-1.10.3=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/ngi
nx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fa
stcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_reques
t_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_geoip_module=dynamic --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_sub_module --wit
h-http_xslt_module=dynamic --with-stream=dynamic --with-stream_ssl_module --with-mail=dynamic --with-mail_ssl_module --add-dynamic-module=/build/nginx-qJwWoo/nginx-1.10.3/debian/modules/nginx-auth-pam --add-dynamic-module=/build/nginx-qJwWoo/nginx-1.10.3/debian/modules/nginx-dav-
ext-module --add-dynamic-module=/build/nginx-qJwWoo/nginx-1.10.3/debian/modules/nginx-echo --add-dynamic-module=/build/nginx-qJwWoo/nginx-1.10.3/debian/modules/nginx-upstream-fair --add-dynamic-module=/build/nginx-qJwWoo/nginx-1.10.3/debian/modules/ngx_http_substitutions_filter_m
odule

আমার কনফিগারগুলি দেখতে দেখতে এখানে:

server {
  listen 443 ssl default_server;
  listen [::]:443 ssl;

  server_name one.example.com;

  ssl on;
  ssl_certificate       /etc/letsencrypt/live/one.example.com/fullchain.pem;
  ssl_certificate_key   /etc/letsencrypt/live/one.example.com/privkey.pem;

  index index.html;
  root /var/www/one.example.com/site;
}

server {
  #listen 443 ssl default_server;
  listen [::]:443 ssl;

  server_name two.example.com;

  ssl on;
  ssl_certificate       /etc/letsencrypt/live/two.example.com/fullchain.pem;
  ssl_certificate_key   /etc/letsencrypt/live/two.example.com/privkey.pem;

  index index.html;
  root /var/www/two.example.com/site;
}

যদি listen 443 ssl default_server;উভয় সার্ভারে আমার কাছে নির্দেশ থাকে তবে এটি দুটি ডোমেনের জন্য সেই সার্ভারের জন্য এসএসএল শংসাপত্রটি ফিরিয়ে দেবে। যদি আমি উভয় ডোমেন থেকে এটি সরিয়ে ফেলি তবে আমি কেবল কিছুই পাই না - উভয় সার্ভার ডোমেনই সংযোগ প্রত্যাখ্যান করে।

এখানে আমার কী ভুল হচ্ছে? আমি কী বুঝতে পারি না এসএনআই কীভাবে কাজ করে? আমার এনগিনেক্স এসএনআই সমর্থন সক্ষম করে তৈরি করা হয়েছে। এবং এখনও ... আমি কেবলমাত্র একটি সাবডোমেনের জন্য সরবরাহ করা এসএসএল শংসাপত্র পাব।


আপনি কিভাবে পরীক্ষা করবেন? যদি আপনি পরীক্ষা openssl s_clientকরে থাকেন তবে -servername hostnameবিকল্পটি যুক্ত করার বিষয়টি নিশ্চিত করুন যাতে ক্লায়েন্টটি আসলে এসএনআই ব্যবহার করে।
স্টিফেন অ্যালরিচ

@ স্টেফেনআলরিচ ক্রোম হ'ল এটি করা একটি উপায়। কেবল ব্যবহারের চেষ্টা করেছি openssl s_client -servername two.example.com -connect two.example.com:443এবং এটি আমাকে সিএন দেয় one.example.com। যদি আমি কোনটির ডিফল্ট সার্ভারটি অদলবদল করি তবে আমি অন্যান্য উপায়ে জিনিসগুলি পাই।
ওয়েইন ওয়ার্নার

এবং কিক এবং গ্রিনের জন্য আমি এটি স্রেফ মিশ্রিত করেছি: -servername one -connect twoএবং তারপরে বিপরীত। ওপেনসেল এস_স্লায়েন্ট এবং ক্রোম উভয়ই একই আচরণ পর্যবেক্ষণ করে - একমাত্র আপাত সংজ্ঞায়িত বৈশিষ্ট্যটি হ'ল ডিফল্ট সার্ভার লাইন।
ওয়েইন ওয়ার্নার

@ স্টেফেনআলরিচ এটি দেখতে পাবেন যে আইপিভি 6 সিনট্যাক্স শোনার জন্য কিছু আলাদা করে? আমি একটি উত্তর পোস্ট করেছি, তবে এটি যদি আপনার জন্য কিছু ট্রিগার করে তবে আমি কেন সে
ওয়েন ওয়ার্নার

আমার যখন একটি একক সার্ভারে একাধিক সাইট রয়েছে, তখন আমি সম্পূর্ণ আলাদা default_serverব্লক রাখতে পছন্দ করি যা কোনও সাইটই ফেরত না।
টেরো কিলকেনেন

উত্তর:


11
listen 443 ssl default_server;
listen [::]:443 ssl;

প্রথম লাইনটি আইপিভি 4-তে 443 পোর্টে শুনতে সক্ষম করে। দ্বিতীয় লাইনটি কেবলমাত্র আইপিভি 6কে অন্তর্ভুক্ত করে। যেহেতু আপনার কেবলমাত্র একটি একক listen 443(আইপিভি 4) কনফিগারেশন রয়েছে আপনি যদি আইপিভি 4 এর সাথে সংযুক্ত হন তবে এটিই ব্যবহৃত হয়। আপনি যদি পরিবর্তে আইপিভি 6 এর সাথে সংযোগ স্থাপনের চেষ্টা করেন তবে এসএনআইয়ের প্রত্যাশিত আচরণটি দেখা উচিত।

পরিবর্তে আপনি সম্ভবত ডিফল্ট সার্ভারের জন্য ব্যবহার করতে পারেন:

  listen 443 ssl default_server;
  listen [::]:443 ssl default_server;

এবং অন্যান্য সার্ভারের জন্য

  listen 443 ssl;
  listen [::]:443 ssl;

2

স্পষ্টতই এর আইপিভি 6 শোনার সিনট্যাক্সের সাথে কিছু করার আছে। আমি যখন পরিবর্তন

listen [::]:443 ssl;

প্রতি

listen 443 ssl;

তারপরে এটি কাজ করে।

আমি জানি না এটি কেন এবং আরও উত্তর / আরও ভাল ব্যাখ্যা সহ স্বাগত জানাব।


সুতরাং আপনি সার্ভারের সাথে আইপিভি 4 বা আইপিভি 6 এর সাথে সংযোগ স্থাপন করেছেন? আপনি যদি আইপিভি 4 এর সাথে সংযুক্ত থাকেন তবে এটি স্পষ্ট হয় কারণ আপনার কেবলমাত্র একটি আইপিভি 4 কনফিগারেশন ছিল - ডিফল্ট সার্ভার। IPv6 কনফিগারেশনটি IPv4 কভার করার জন্য আপনাকে যুক্ত করতে হবেipv6only=off;
স্টেফেন উলরিচ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.