bg-tutorials

Node.js-এ কীভাবে CSR তৈরি করবেন

এই টিউটোরিয়ালটি আপনাকে দেখাবে কীভাবে একটি Node.js অ্যাপ্লিকেশনের জন্য CSR তৈরি করতে হয়। Node.js-এ কোনো বিল্ট-ইন CSR জেনারেশন টুল নেই, তাই আপনি Node চালাবে এমন মেশিনে OpenSSL ব্যবহার করে প্রাইভেট কী এবং সার্টিফিকেট সাইনিং রিকোয়েস্ট তৈরি করেন, আপনার সার্টিফিকেট অথরিটির কাছে CSR জমা দেন, এবং তারপর fs.readFileSync()https.createServer() দিয়ে ইস্যুকৃত সার্টিফিকেটটি আপনার অ্যাপে লোড করেন।

নিচের ধাপগুলো OpenSSL সহ যেকোনো অপারেটিং সিস্টেমে কাজ করে, যা বর্তমান সকল Linux ডিস্ট্রিবিউশন, macOS এবং Windows (অফিসিয়াল OpenSSL বাইনারি বা Git Bash-এর মাধ্যমে) কভার করে। আধুনিক OpenSSL ডিফল্টভাবে SHA-256 দিয়ে অনুরোধ সাইন করে, তাই আপনাকে আলাদা ডাইজেস্ট ফ্ল্যাগ যোগ করার প্রয়োজন নেই।

ধাপ ১: নিশ্চিত করুন OpenSSL ইনস্টল করা আছে

আপনার Node.js অ্যাপ চালাবে এমন মেশিনে OpenSSL উপলব্ধ কিনা পরীক্ষা করুন:

openssl version

আপনি OpenSSL 3.0.x বা তার চেয়ে নতুন কোনো লাইন দেখতে পাবেন। কমান্ডটি পাওয়া না গেলে, আপনার প্ল্যাটফর্মের জন্য এটি ইনস্টল করুন:

  • Debian, Ubuntu: sudo apt update && sudo apt install openssl
  • RHEL, AlmaLinux, Rocky Linux, Amazon Linux: sudo dnf install openssl (অথবা পুরনো রিলিজের ক্ষেত্রে sudo yum install openssl)
  • macOS: OpenSSL (কিছু সংস্করণে LibreSSL, Homebrew দিয়ে ইনস্টল করলে OpenSSL 3) ইতিমধ্যে Terminal-এ রয়েছে। আপস্ট্রিম বিল্ড ইনস্টল করতে: brew install openssl@3
  • Windows: অফিসিয়াল OpenSSL বাইনারি ইনস্টল করুন, অথবা Git Bash ব্যবহার করুন, যাতে OpenSSL আগে থেকেই ইনস্টল করা থাকে।

ধাপ ২: প্রাইভেট কী এবং CSR তৈরি করুন

যে মেশিনে Node.js চলবে সেখানে কী এবং CSR তৈরি করুন। প্রাইভেট কীটি CSR-এর পাশেই তৈরি হয় এবং সেই মেশিনেই থাকতে হবে। এই কমান্ডগুলো অন্য কোথাও চালিয়ে তারপর কী কপি করে আনলে প্রাইভেট কী থাকার মূল উদ্দেশ্যই ব্যর্থ হয়ে যায়।

নিচের কমান্ডটি চালান। এটি এক ধাপেই একটি 2048-বিট RSA প্রাইভেট কী এবং তার সাথে মিলে যাওয়া একটি CSR তৈরি করে, যেখানে সাবজেক্ট এবং Subject Alternative Names (SANs) ইনলাইনে সরবরাহ করা হয়েছে যাতে OpenSSL প্রশ্ন জিজ্ঞাসা করতে থেমে না যায়:

openssl req -new -newkey rsa:2048 -nodes 
-keyout yourdomain.key 
-out yourdomain.csr 
-subj "/C=US/ST=YourState/L=YourCity/O=YourCompany/CN=yourdomain.com" 
-addext "subjectAltName=DNS:yourdomain.com,DNS:www.yourdomain.com"

প্রতিটি অংশ কী করে:

  • -newkey rsa:2048 একটি নতুন 2048-বিট RSA কী তৈরি করে। বর্তমানে পাবলিক CA-গুলো এটিকেই ন্যূনতম হিসেবে গ্রহণ করে; আপনি একটি বড় কী-এর জন্য rsa:4096 ব্যবহার করতে পারেন, অথবা ECDSA-তে স্যুইচ করতে পারেন (নিচে দেখুন)।
  • -nodes প্রাইভেট কীটি এনক্রিপ্ট না করেই রাখে যাতে Node.js স্টার্টআপের সময় পাসফ্রেজ ছাড়াই সেটি পড়তে পারে। Node-এর https মডিউল আসলে এনক্রিপ্ট করা কী-এর জন্য একটি passphrase অপশন সমর্থন করে, কিন্তু পাসফ্রেজটি তখনও মেশিনের কোনো না কোনো জায়গা থেকে আসতে হবে (একটি কনফিগ ফাইল, একটি এনভায়রনমেন্ট ভ্যারিয়েবল, বা একটি সিক্রেট ম্যানেজার)।
  • -keyout এবং -out প্রাইভেট কী এবং CSR ফাইলগুলোর নাম নির্ধারণ করে।
  • -subj সার্টিফিকেট সাবজেক্ট সরবরাহ করে। এখানে প্লেসহোল্ডার নয়, আপনার প্রকৃত কোম্পানির নাম, রাজ্য এবং শহর দিন। CN (Common Name) হলো আপনার প্রাথমিক ডোমেইন।
  • -addext “subjectAltName=…” সার্টিফিকেটটির কভার করা উচিত এমন প্রতিটি হোস্টনেম তালিকাভুক্ত করে। পাবলিক CA-গুলো SAN তালিকার বিপরীতে যাচাই করে, তাই এখানে Common Name-ও অন্তর্ভুক্ত করুন। -addext ফ্ল্যাগের জন্য OpenSSL 1.1.1 বা তার নতুন সংস্করণ প্রয়োজন, যা বর্তমান প্রতিটি OS-এই আছে।

সর্বত্র yourdomain.com-এর জায়গায় আপনার প্রকৃত ডোমেইন বসান। অতিরিক্ত হোস্টনেম কভার করতে, সেগুলো কমা দিয়ে আলাদা করে SAN তালিকায় যোগ করুন, যেমন DNS:api.yourdomain.com। একটি ওয়াইল্ডকার্ডের জন্য, ওয়াইল্ডকার্ড এবং বেয়ার ডোমেইন উভয়ই অন্তর্ভুক্ত করুন: DNS:*.yourdomain.com,DNS:yourdomain.com

আপনি যদি একটি ECDSA কী পছন্দ করেন (আকারে ছোট এবং দ্রুততর, এবং P-256 ব্যাপকভাবে সমর্থিত), তাহলে পরিবর্তে এভাবে কী এবং CSR তৈরি করুন:

openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -pkeyopt ec_param_enc:named_curve -nodes 
-keyout yourdomain.key 
-out yourdomain.csr 
-subj "/C=US/ST=YourState/L=YourCity/O=YourCompany/CN=yourdomain.com" 
-addext "subjectAltName=DNS:yourdomain.com,DNS:www.yourdomain.com"

ইন্টারঅ্যাক্টিভ মোড (-subj ছাড়া)

আপনি যদি প্রতিটি ফিল্ডের জন্য OpenSSL আপনাকে জিজ্ঞাসা করুক এটাই চান, তাহলে -subj ফ্ল্যাগটি বাদ দিন:

openssl req -new -newkey rsa:2048 -nodes 
-keyout yourdomain.key -out yourdomain.csr 
-addext "subjectAltName=DNS:yourdomain.com,DNS:www.yourdomain.com"

OpenSSL নিচের বিবরণগুলো জিজ্ঞাসা করবে:

  • Country Name (C): আপনার প্রতিষ্ঠানের দুই-অক্ষরের ISO দেশ কোড (উদাহরণস্বরূপ, US)।
  • State or Province Name (S): যে রাজ্য বা প্রদেশে আপনার কোম্পানি নিবন্ধিত সেই পূর্ণ নাম (উদাহরণস্বরূপ, California)। সংক্ষিপ্ত করবেন না।
  • Locality Name (L): যে শহরে আপনার ব্যবসা নিবন্ধিত (উদাহরণস্বরূপ, San Jose)।
  • Organization Name (O): আপনার কোম্পানির আইনি নাম (উদাহরণস্বরূপ, GPI Holding LLC)। একটি DV (Domain Validated) সার্টিফিকেটের জন্য, এটি খালি রেখে Enter চাপুন।
  • Organizational Unit Name (OU): সেপ্টেম্বর ২০২২ থেকে অবচিত এবং পাবলিক CA-গুলো এটি উপেক্ষা করে। এটি খালি রাখুন।
  • Common Name (CN): আপনি যে ফুলি কোয়ালিফাইড ডোমেইন নেম (FQDN) সুরক্ষিত করছেন, উদাহরণস্বরূপ yourdomain.com। একটি ওয়াইল্ডকার্ডের জন্য, *.yourdomain.com ব্যবহার করুন।
  • Email Address: ঐচ্ছিক। এটি খালি রাখুন।
  • A challenge password: অপ্রচলিত। এটি খালি রাখুন।

ধাপ ৩: আপনার ফাইলগুলো খুঁজুন এবং সুরক্ষিত করুন

উভয় ফাইল তৈরি হয়েছে কিনা নিশ্চিত করতে বর্তমান ডিরেক্টরিটি তালিকাভুক্ত করুন:

ls

আপনি দুটি নতুন ফাইল দেখতে পাবেন:

  • yourdomain.key: আপনার প্রাইভেট কী। এটি সার্ভারে রাখুন, নিরাপদে ব্যাকআপ নিন এবং সার্টিফিকেট অথরিটি সহ কারো কাছেই এটি কখনো পাঠাবেন না। যার কাছে এই কী থাকবে সে আপনার সাইটের ছদ্মবেশ ধারণ করতে পারবে।
  • yourdomain.csr: আপনার সার্টিফিকেট সাইনিং রিকোয়েস্ট। এই ফাইলটি আপনি SSL প্রোভাইডারের কাছে জমা দেবেন।

Linux বা macOS-এ, প্রাইভেট কী-তে তাৎক্ষণিকভাবে কঠোর অনুমতি নির্ধারণ করুন যাতে শুধুমাত্র যে ইউজার Node.js চালায় সে-ই এটি পড়তে পারে:

chmod 600 yourdomain.key

যদি Node.js একটি নিবেদিত সার্ভিস অ্যাকাউন্টের অধীনে চলে (উদাহরণস্বরূপ, node বা www-data), তাহলে মালিকও নির্ধারণ করুন যাতে প্রসেসটি কী পড়তে পারে:

sudo chown node:node yourdomain.key

ধাপ ৪: CSR যাচাই করুন (ঐচ্ছিক তবে সুপারিশকৃত)

এটি জমা দেওয়ার আগে, CSR-এ সঠিক সাবজেক্ট এবং SAN আছে কিনা এবং এর স্বাক্ষর বৈধ কিনা তা পরীক্ষা করুন। এটি OpenSSL দিয়ে স্থানীয়ভাবে অনুরোধটি ডিকোড করে:

openssl req -noout -text -verify -in yourdomain.csr

নিশ্চিত করুন যে Subject লাইনে আপনার বিবরণ দেখাচ্ছে, X509v3 Subject Alternative Name-এ আপনার প্রত্যাশিত প্রতিটি হোস্টনেম তালিকাভুক্ত আছে, এবং স্বাক্ষর যাচাইয়ে verify OK প্রিন্ট হচ্ছে। স্বাক্ষর অ্যালগরিদমে sha256WithRSAEncryption (অথবা ECDSA কী-এর ক্ষেত্রে ecdsa-with-SHA256) দেখানো উচিত। কমান্ড লাইন ব্যবহার করতে না চাইলে, ব্রাউজারে একই ফিল্ডগুলো পড়তে আমাদের অনলাইন CSR ডিকোডার-এ CSR পেস্ট করুন।

ধাপ ৫: আপনার CSR জমা দিন

আপনার অর্ডারের জন্য CSR কপি করতে, এর কনটেন্ট প্রিন্ট করুন:

cat yourdomain.csr

আপনি এই রকম একটি টেক্সট ব্লক দেখতে পাবেন:

-----BEGIN CERTIFICATE REQUEST-----
MIIBozCB... (a long string of characters)
-----END CERTIFICATE REQUEST-----

পুরো ব্লকটি কপি করুন, —–BEGIN CERTIFICATE REQUEST—– এবং —–END CERTIFICATE REQUEST—– লাইনসহ (প্রতিটি মার্কারের উভয় পাশে পাঁচটি করে হাইফেন আছে)। সেই সম্পূর্ণ ব্লকটিই আপনার CSR। কেনার সময় অর্ডার ফর্মে এটি পেস্ট করুন, এবং মিলিয়ে যাওয়া প্রাইভেট কী-টি সার্ভারে যথাস্থানে রাখুন।

কমান্ড লাইন ব্যবহার করতে না চাইলে, আপনি আমাদের অনলাইন CSR জেনারেটর দিয়েও অনুরোধটি তৈরি করতে পারেন। মনে রাখবেন এটি আপনার ব্রাউজারে প্রাইভেট কী তৈরি করে, তাই সেই কী নিজে সংরক্ষণ করুন এবং Node.js সার্ভারে স্থানান্তর করুন।

CA সার্টিফিকেট ইস্যু করার পর যা ঘটে

একবার CA CSR যাচাই করে সার্টিফিকেট ইস্যু করলে, আপনি সাধারণত আপনার সার্ভার সার্টিফিকেট (আপনার ডোমেইনের নামে একটি .crt ফাইল) পাবেন সাথে এক বা একাধিক ইন্টারমিডিয়েট সার্টিফিকেট, যা কখনো কখনো একটি .ca-bundle ফাইলে বান্ডিল করা থাকে। Node.js এগুলো জাভাস্ক্রিপ্টে লোড করে: সার্ভার সার্টিফিকেট এবং ইন্টারমিডিয়েটগুলো একটি একক fullchain.crt ফাইলে একত্রিত করুন, তারপর fs.readFileSync() দিয়ে এটি পড়ুন এবং https.createServer()-এ পাস করুন:

const https = require('https');
const fs = require('fs');

const options = {
  key: fs.readFileSync('/path/to/yourdomain.key'),
  cert: fs.readFileSync('/path/to/fullchain.crt'),
  minVersion: 'TLSv1.2'
};

https.createServer(options, (req, res) => {
  res.writeHead(200);
  res.end('Welcome to a Node.js HTTPS servern');
}).listen(443);

এই ফুলচেইন প্যাটার্নটিই বেশিরভাগ প্রোডাকশন সেটআপে ব্যবহৃত হয়। সম্পূর্ণ ওয়াকথ্রু (একটি ES মডিউল উদাহরণ, একটি বিকল্প ca: অ্যারে পদ্ধতি এবং একটি Express উদাহরণসহ) আমাদের Node.js SSL ইনস্টলেশন টিউটোরিয়াল-এ বর্ণনা করা আছে।

প্রোডাকশন ডিপ্লয়মেন্ট সম্পর্কে একটি নোট। ২০২৬ সালে পাবলিক ট্রাফিক পরিচালনা করে এমন বেশিরভাগ Node.js অ্যাপ একটি রিভার্স প্রক্সি বা ক্লাউড লোড ব্যালেন্সারের (NGINX, HAProxy, Caddy, AWS ALB, Cloudflare, Fastly) পেছনে চলে যা এজে TLS টার্মিনেট করে এবং একটি উচ্চ লোকাল পোর্টে সাধারণ HTTP বা HTTP/2 Node-এর কাছে ফরওয়ার্ড করে। এই প্যাটার্নে, সার্টিফিকেট (এবং উপরে আপনার তৈরি করা CSR) প্রক্সি বা লোড ব্যালেন্সারে থাকে, Node প্রসেসে নয়। Node.js-কে সরাসরি TLS টার্মিনেট করতে দেওয়া ডেভেলপমেন্ট, অভ্যন্তরীণ সার্ভিস এবং ছোট ডিপ্লয়মেন্টের জন্য একদম ঠিক আছে; একটি পাবলিক প্রোডাকশন অ্যাপের জন্য, এজে TLS টার্মিনেট করাই বেশি প্রচলিত পদ্ধতি।

আজ অর্ডার করার সময় SSL শংসাপত্রে 10% সংরক্ষণ করুন!

দ্রুত ইস্যু, শক্তিশালী এনক্রিপশন, 99.99% ব্রাউজার বিশ্বাস, নিবেদিত সমর্থন, এবং 25 দিনের অর্থ ফেরত গ্যারান্টি। কুপন কোড: SAVE10

উড়ন্ত একটি ড্রাগনের একটি বিস্তারিত চিত্র
লিখেছেন

SSL শংসাপত্রে বিশেষজ্ঞ অভিজ্ঞ বিষয়বস্তু লেখক। জটিল সাইবারসিকিউরিটি বিষয়গুলিকে পরিষ্কার, আকর্ষক সামগ্রীতে রূপান্তর করা। প্রভাবশালী বর্ণনার মাধ্যমে ডিজিটাল নিরাপত্তার উন্নতিতে অবদান রাখুন।