এই টিউটোরিয়ালটি আপনাকে দেখায় OpenSSL ব্যবহার করে Heroku-এর জন্য কীভাবে একটি CSR (Certificate Signing Request) তৈরি করবেন এবং Heroku CLI দিয়ে ইস্যুকৃত সার্টিফিকেট কীভাবে আপলোড করবেন।
Heroku-এর নিজস্ব প্ল্যাটফর্মে কোনো বিল্ট-ইন CSR ফর্ম নেই, তাই রিকোয়েস্ট এবং সংশ্লিষ্ট প্রাইভেট কী প্ল্যাটফর্মের বাইরে তৈরি করা হয় (আপনার লোকাল Linux, macOS, বা Windows মেশিনে, বা OpenSSL উপলব্ধ যেকোনো শেলে)। সার্টিফিকেট অথরিটি সার্টিফিকেট ইস্যু করার পর, আপনি এটিকে ইন্টারমিডিয়েট চেইনের সাথে সংযুক্ত করে heroku certs:add এর মাধ্যমে আপলোড করেন।
আপনার কি সত্যিই Heroku-তে একটি CSR প্রয়োজন?
বেশিরভাগ Heroku অ্যাপের জন্য উত্তর হলো না। Heroku-এর Automated Certificate Management (ACM) অ্যাপের প্রতিটি কাস্টম ডোমেইনের জন্য একটি বিনামূল্যের Let’s Encrypt সার্টিফিকেট প্রভিশন এবং স্বয়ংক্রিয়ভাবে নবায়ন করে, কোনো CSR তৈরি করার বা নবায়নের ক্যালেন্ডার বজায় রাখার প্রয়োজন ছাড়াই। ACM Eco, Basic, Standard, এবং Performance ডাইনোতে উপলব্ধ। যদি ACM আপনার ব্যবহারের ক্ষেত্রে উপযুক্ত হয়, তবে একটি সাধারণ CLI কমান্ড দিয়ে এটি সক্ষম করুন:
heroku certs:auto:enable -a your-app-name
নিম্নলিখিতগুলোর মধ্যে যেকোনো একটি প্রযোজ্য হলে কেবল তখনই একটি CSR তৈরি করুন এবং স্ব-পরিচালিত (থার্ড-পার্টি) সার্টিফিকেট ব্যবহার করুন:
- আপনার একটি ওয়াইল্ডকার্ড সার্টিফিকেট প্রয়োজন। ACM প্রতি কাস্টম ডোমেইনে শুধুমাত্র একক-নামের Let’s Encrypt সার্টিফিকেট ইস্যু করে, *.example.com নয়।
- আপনার OV বা EV ভ্যালিডেশন প্রয়োজন। ACM শুধুমাত্র DV।
- আপনার নীতি বা চুক্তির জন্য Let’s Encrypt ছাড়া একটি নির্দিষ্ট সার্টিফিকেট অথরিটি প্রয়োজন।
- আপনার কাছে ইতিমধ্যে একটি বৈধ সার্টিফিকেট আছে এবং আপনি এটি পুনরায় ইস্যু না করে Heroku-তে পুনরায় স্থাপন করতে চান।
- আপনার এমন হোস্টনেম কভার করা একটি মাল্টি-ডোমেইন (SAN) সার্টিফিকেট প্রয়োজন যা সবগুলো এই Heroku অ্যাপে নেই।
উপরের কোনোটি প্রযোজ্য না হলে, CSR-এর কাজ এড়িয়ে যান এবং ACM ব্যবহার করুন। ইনস্টল প্রক্রিয়ার জন্য, আমাদের গাইড দেখুন কীভাবে Heroku-তে SSL সার্টিফিকেট ইনস্টল করবেন।
CSR তৈরি করার আগে জানার মতো Heroku SSL মূলনীতি
কয়েকটি প্ল্যাটফর্ম সীমাবদ্ধতা রয়েছে যা CSR এবং কী কেমন হতে হবে তা নির্ধারণ করে:
- SNI ডিফল্ট। প্রতিটি নতুন অ্যাপ Heroku SSL ব্যবহার করে, যা Server Name Indication-এর উপর নির্ভর করে, তাই একটি একক Heroku এন্ডপয়েন্ট একাধিক HTTPS হোস্টনেমকে তাদের নিজস্ব সার্টিফিকেট দিয়ে সার্ভ করতে পারে। লিগ্যাসি SSL Endpoint অ্যাড-অনটি 2021 সালে অপ্রচলিত ঘোষণা করা হয়েছিল (নতুন প্রভিশনিং 14 মে, 2021-এ বন্ধ হয়ে যায়; পণ্যটি 18 অক্টোবর, 2021-এ জীবনের শেষ পর্যায়ে পৌঁছায়) এবং নতুন অ্যাপে উপলব্ধ নয়।
- শুধুমাত্র RSA কী। Heroku-এর SSL স্ট্যাক RSA প্রাইভেট কী (2048 বিট বা তার বেশি) গ্রহণ করে। ম্যানুয়াল সার্টিফিকেট আপলোডের জন্য ECDSA কী সমর্থিত নয়, তাই -newkey rsa:2048 দিয়ে CSR তৈরি করুন (অথবা আপনার নীতির জন্য বড় কী প্রয়োজন হলে rsa:3072 / rsa:4096)।
- ফুলচেইন PEM প্রয়োজন। Heroku একটি একক PEM ফাইল আশা করে যেখানে প্রথমে এন্ড-এনটিটি সার্টিফিকেট এবং তারপর ইন্টারমিডিয়েট CA বান্ডেল সংযুক্ত থাকবে। শুধুমাত্র লিফ সার্টিফিকেট আপলোডের সময় প্রত্যাখ্যাত হবে।
- এনক্রিপ্ট না করা প্রাইভেট কী। সার্টিফিকেটের সাথে আপলোড করা কী পাসফ্রেজ-সুরক্ষিত হতে পারবে না। নিচের OpenSSL কমান্ডটি কীটিকে স্পষ্ট PEM-এ লিখতে -nodes ব্যবহার করে।
- কাস্টম ডোমেইন পূর্বশর্ত। কাস্টম ডোমেইনটি
heroku domains:addএর মাধ্যমে অ্যাপে নিবন্ধিত না হওয়া এবং প্রতি-ডোমেইন *.herokudns.com DNS টার্গেটের দিকে নির্দেশ না করা পর্যন্ত Heroku কোনো সার্টিফিকেট (ACM বা ম্যানুয়াল) বাইন্ড করবে না।
OpenSSL দিয়ে Heroku-এর জন্য CSR তৈরি করুন
যদি আপনি ইতিমধ্যে আপনার CSR তৈরি করে থাকেন এবং আপনার সার্টিফিকেট অথরিটি থেকে সাইন করা সার্টিফিকেট পেয়ে থাকেন, তাহলে সরাসরি Heroku-তে সার্টিফিকেট আপলোড করুন-এ যান। Heroku ডিপ্লয়মেন্টের জন্য একটি CSR তৈরি করার দুটি উপায় রয়েছে:
- SSL Dragon-এর CSR জেনারেটর ব্যবহার করুন: এটি আপনার ব্রাউজারে একটি সংক্ষিপ্ত ফর্ম থেকে CSR এবং সংশ্লিষ্ট RSA প্রাইভেট কী উভয়ই তৈরি করে, তারপর আপনি আপনার SSL অর্ডারের সময় CSR পেস্ট করেন।
- নিজেই OpenSSL দিয়ে CSR তৈরি করুন, হয় আপনার লোকাল মেশিনে বা OpenSSL ইনস্টল করা যেকোনো শেলে। নিচের ধাপগুলো এই পথটি কভার করে।
ধাপ ১: OpenSSL সহ একটি শেল খুলুন
OpenSSL প্রতিটি সাম্প্রতিক Linux ডিস্ট্রিবিউশন এবং macOS-এ পাওয়া যায়। Windows-এ, এটি ইনস্টল করুন (দেখুন আমাদের গাইড Windows-এ OpenSSL ইনস্টল করা) এবং PowerShell বা Command Prompt-এ কমান্ড চালান। আপনি লিখতে পারেন এমন যেকোনো ফোল্ডারে একটি টার্মিনাল খুলুন: OpenSSL সেখানে CSR এবং কী ফাইলগুলো প্লেইন টেক্সট হিসেবে তৈরি করবে, তাই কাজ শেষ হলে আপনি সেগুলো মেশিন থেকে সরিয়ে নিতে পারেন।
ধাপ ২: OpenSSL কমান্ড চালান
আপনার শেলে নিম্নলিখিত কমান্ডটি চালান। yourdomain-এর পরিবর্তে আপনার প্রকৃত ডোমেইন লিখুন (উদাহরণস্বরূপ, example.com):
openssl req -new -newkey rsa:2048 -nodes
-keyout yourdomain.key -out yourdomain.csr
-addext "subjectAltName = DNS:yourdomain.com,DNS:www.yourdomain.com"
প্রতিটি ফ্ল্যাগ যা করে:
- -new একটি নতুন CSR তৈরি করে।
- -newkey rsa:2048 CSR-এর সাথে একটি নতুন 2048-বিট RSA প্রাইভেট কী তৈরি করে। আপনার নীতির জন্য বড় কী প্রয়োজন হলে rsa:3072 বা rsa:4096 ব্যবহার করুন। ECDSA-তে পরিবর্তন করবেন না: Heroku ম্যানুয়াল আপলোডে ECC কী প্রত্যাখ্যান করে।
- -nodes কীটিকে পাসফ্রেজ ছাড়া লেখে (OpenSSL 3.x-এ সমতুল্য ফ্ল্যাগ হলো -noenc; উভয়ই কাজ করে)। Heroku
heroku certs:add-এর সময় একটি এনক্রিপ্টেড প্রাইভেট কী প্রত্যাখ্যান করবে। - -keyout এবং -out হলো কী এবং CSR-এর জন্য আউটপুট পাথ।
- -addext “subjectAltName=DNS:…” সরাসরি Subject Alternative Names (SAN) এমবেড করে (OpenSSL 1.1.1 বা তার পরের সংস্করণ প্রয়োজন)। প্রতিটি আধুনিক ব্রাউজার এবং CA-এর SAN এক্সটেনশন প্রয়োজন, এমনকি একক-ডোমেইন সার্টিফিকেটের জন্যও, তাই এপেক্স (yourdomain.com) এবং আপনি Heroku-তে সার্ভ করার পরিকল্পনা করছেন এমন যেকোনো www ভ্যারিয়েন্ট উভয়ই অন্তর্ভুক্ত করুন। একটি ওয়াইল্ডকার্ডের জন্য, *.yourdomain.com-ও তালিকাভুক্ত করুন।
ধাপ ৩: CSR বিবরণ পূরণ করুন
OpenSSL আপনাকে সার্টিফিকেটের পরিচয় ফিল্ডগুলোর জন্য প্রম্পট করে। সেগুলো নিম্নরূপে প্রবেশ করান:
- Country Name: আপনার প্রতিষ্ঠান আইনগতভাবে যে দেশে নিবন্ধিত সেই দেশের দুই-অক্ষরের ISO কোড (উদাহরণস্বরূপ, US)।
- State or Province Name: রাজ্য বা অঞ্চলের সম্পূর্ণ নাম (উদাহরণস্বরূপ, Nevada)। সংক্ষিপ্ত করবেন না।
- Locality Name: শহর (উদাহরণস্বরূপ, Las Vegas)।
- Organization Name: আপনার প্রতিষ্ঠানের আইনি নাম। একটি ডোমেইন ভ্যালিডেশন সার্টিফিকেটের জন্য এই ফিল্ডটি যাচাই করা হয় না এবং বাদ দেওয়া যেতে পারে, তবে শুধু Enter চাপবেন না: OpenSSL তখন এর কনফিগারেশনে যা কিছু ডিফল্ট নির্ধারিত আছে তা পূরণ করবে, এবং স্টক কনফিগারেশনে Internet Widgits Pty Ltd থাকে, যা আপনার CSR-এ শেষ হবে। এটি প্রকৃতপক্ষে খালি রাখতে একটি একক পিরিয়ড (
.) টাইপ করুন। - Organizational Unit Name: CA/Browser Forum দ্বারা অপ্রচলিত ঘোষিত, তাই এটি খালি রাখুন।
- Common Name: আপনি যে সম্পূর্ণ যোগ্য ডোমেইন নাম (FQDN) সুরক্ষিত করতে চান, উদাহরণস্বরূপ www.yourdomain.com। একটি ওয়াইল্ডকার্ডের জন্য, *.yourdomain.com প্রবেশ করান। কমন নেম অবশ্যই SAN তালিকাতেও উপস্থিত থাকতে হবে।
- Email Address: একটি বৈধ যোগাযোগের ইমেইল (অথবা খালি রাখুন)।
- A challenge password এবং An optional company name: উভয়ই খালি রাখুন। এড়িয়ে যেতে Enter চাপুন।
OpenSSL বর্তমান ডিরেক্টরিতে দুটি ফাইল লেখে:
- yourdomain.csr: CSR যা আপনি আপনার সার্টিফিকেট অথরিটির কাছে জমা দেবেন।
- yourdomain.key: প্রাইভেট কী। এই ফাইলটি ব্যক্তিগত রাখুন এবং এর ব্যাকআপ নিন; আপনি ইস্যুকৃত সার্টিফিকেট Heroku-তে আপলোড করার সময় এটি আবার প্রয়োজন হবে।
ধাপ ৪: আপনার সার্টিফিকেট অথরিটির কাছে CSR জমা দিন
যেকোনো টেক্সট এডিটরে yourdomain.csr খুলুন এবং -----BEGIN CERTIFICATE REQUEST----- এবং -----END CERTIFICATE REQUEST----- মার্কারসহ পুরো ব্লকটি কপি করুন। আপনার SSL অর্ডারের সময় এটি CSR ফিল্ডে পেস্ট করুন।
জমা দেওয়ার আগে, আপনি আমাদের CSR ডিকোডার দিয়ে CSR-এর বিষয়বস্তু যাচাই করতে পারেন: এটি কমন নেম, SAN তালিকা, কী টাইপ এবং কী দৈর্ঘ্য দেখায় যাতে CA-এর আগেই আপনি টাইপো ধরতে পারেন।
CA যে ভ্যালিডেশন পদক্ষেপগুলো চায় (DNS, ফাইল-ভিত্তিক, বা ইমেইল) তা সম্পন্ন করুন। একবার সার্টিফিকেট ইস্যু হলে, CA আপনাকে সাইন করা এন্ড-এনটিটি সার্টিফিকেট (সাধারণত একটি .crt ফাইল) এবং ইন্টারমিডিয়েট CA বান্ডেল (প্রায়ই একটি .ca-bundle ফাইল) পাঠায়। নিচে আপলোডের সাথে চালিয়ে যান।
Heroku-তে সার্টিফিকেট আপলোড করুন
ধাপ ১: আপনার অ্যাপে কাস্টম ডোমেইন নিবন্ধন করুন
কাস্টম ডোমেইনটি অ্যাপে নিবন্ধিত না হওয়া পর্যন্ত Heroku একটি সার্টিফিকেট বাইন্ড করবে না। Heroku CLI-তে লগইন করা একটি টার্মিনাল থেকে চালান:
heroku domains:add www.example.com -a your-app-name
www.example.com-এর পরিবর্তে আপনার ডোমেইন এবং your-app-name-এর পরিবর্তে আপনার Heroku অ্যাপ লিখুন। যেকোনো অতিরিক্ত হোস্টনেমের জন্য (উদাহরণস্বরূপ একটি খালি রুট ডোমেইন বা দ্বিতীয় সাবডোমেইন) কমান্ডটি পুনরাবৃত্তি করুন। কমান্ডটি প্রতি-ডোমেইন DNS টার্গেট প্রদান করে যেমন quiet-fire-1234.herokudns.com: ধাপ ৪-এ আপনি আপনার DNS প্রোভাইডারকে এই মানের দিকে নির্দেশ করবেন।
ধাপ ২: ফুলচেইন PEM ফাইল তৈরি করুন
Heroku একটি একক PEM ফাইল আশা করে যেখানে প্রথমে এন্ড-এনটিটি সার্টিফিকেট এবং তারপর ইন্টারমিডিয়েট চেইন থাকবে। Linux বা macOS-এ, cat দিয়ে ফাইলগুলো সংযুক্ত করুন:
cat yourdomain.crt yourdomain.ca-bundle > server.crt
Windows-এ, উভয় ফাইল একটি প্লেইন টেক্সট এডিটরে খুলুন (Notepad++ বা VS Code, Word নয়) এবং .ca-bundle-এর বিষয়বস্তু .crt-এর বিষয়বস্তুর নিচে পেস্ট করুন, সেই ক্রমে, ব্লকগুলোর মধ্যে কোনো ফাঁকা লাইন ছাড়া। সংযুক্ত ফাইলটি server.crt হিসেবে সংরক্ষণ করুন। যদি আপনার CA ইতিমধ্যে একটি একক PEM-এর মধ্যে চেইনটি পাঠিয়ে থাকে (লিফটি উপরে সহ), তাহলে আপনি সেই ফাইলটি যেমন আছে তেমনই ব্যবহার করতে পারেন।
ধাপ ৩: Heroku CLI দিয়ে সার্টিফিকেট আপলোড করুন
একটি একদম নতুন ইনস্টলের জন্য, certs:add দিয়ে ফুলচেইন PEM এবং সংশ্লিষ্ট প্রাইভেট কী আপলোড করুন:
heroku certs:add server.crt yourdomain.key -a your-app-name
যদি আপনি একই অ্যাপে একটি বিদ্যমান সার্টিফিকেট প্রতিস্থাপন করছেন (উদাহরণস্বরূপ নবায়নের সময়), তবে certs:update ব্যবহার করুন যাতে Heroku একই DNS টার্গেট রাখে:
heroku certs:update server.crt yourdomain.key -a your-app-name
ড্যাশবোর্ড পছন্দ করেন? অ্যাপটি খুলুন, Settings > Domains and certificates-এ যান, Configure SSL-এ ক্লিক করুন, Manually নির্বাচন করুন, সংযুক্ত server.crt-কে সার্টিফিকেট স্লটে এবং .key ফাইলটিকে প্রাইভেট-কী স্লটে টেনে আনুন, তারপর Next-এ ক্লিক করে নিশ্চিত করুন।
আপলোড করার সময় যদি আপনি একটি Internal server error দেখেন, তাহলে প্রায় সবসময়ই আপনার মেশিনে থাকা Heroku CLI পুরানো। heroku update চালান এবং আবার চেষ্টা করুন। যদি ত্রুটিটি থেকে যায়, তাহলে নিশ্চিত করুন যে সার্টিফিকেট ফাইলটি PEM ফরম্যাটে একটি ফুলচেইন (এন্ড-এনটিটি প্রথমে, ইন্টারমিডিয়েট পরে) এবং প্রাইভেট কীটি আপনার জমা দেওয়া CSR-এর সাথে মেলে এমন RSA কী।
ধাপ ৪: DNS-কে Heroku DNS টার্গেটে নির্দেশ করুন
আপনার ডোমেইনগুলো তালিকাভুক্ত করুন এবং Heroku প্রতিটির জন্য যে DNS টার্গেট প্রদান করেছে তা কপি করুন:
heroku domains -a your-app-name
আপনার DNS প্রোভাইডারে, প্রতি ডোমেইনে একটি রেকর্ড তৈরি করুন:
- সাবডোমেইন (উদাহরণস্বরূপ www.example.com): Heroku DNS টার্গেটের দিকে নির্দেশ করা একটি CNAME রেকর্ড তৈরি করুন।
- এপেক্স / রুট ডোমেইন (উদাহরণস্বরূপ example.com): DNS স্পেসিফিকেশন অনুযায়ী এপেক্সে CNAME অনুমোদিত নয়, তাই একই Heroku DNS টার্গেটের দিকে নির্দেশ করা একটি ALIAS, ANAME, বা ফ্ল্যাটেনড-CNAME রেকর্ড ব্যবহার করুন (সঠিক নামটি আপনার DNS প্রোভাইডারের উপর নির্ভর করে)। যদি আপনার DNS প্রোভাইডার এগুলোর কোনোটিই সমর্থন না করে, তাহলে DNS স্থানান্তর করুন এমন একটিতে যা করে (Cloudflare, DNSimple, Route 53, NS1, easyDNS, এবং অনুরূপ)।
DNS-কে your-app-name.herokuapp.com বা যেকোনো *.herokussl.com হোস্টনেমের দিকে নির্দেশ করবেন না: ম্যানুয়াল বাইন্ডিং এদের কোনোটির মাধ্যমেই সঠিকভাবে রুট হবে না। সবসময় Heroku দ্বারা নির্ধারিত প্রতি-ডোমেইন DNS টার্গেট ব্যবহার করুন।
CSR এবং স্থাপিত সার্টিফিকেট যাচাই করুন
CSR জমা দেওয়ার আগে, কমন নেম, SAN তালিকা, কী টাইপ, এবং কী দৈর্ঘ্য নিশ্চিত করতে স্থানীয়ভাবে এটি ডিকোড করুন:
openssl req -in yourdomain.csr -noout -text
অথবা আপনার ব্রাউজারে একই তথ্যের জন্য আমাদের CSR ডিকোডার-এ CSR পেস্ট করুন।
আপলোড করার পর, নিশ্চিত করুন যে সার্টিফিকেটটি ইনস্টল করা হয়েছে এবং ট্র্যাফিক সার্ভ করছে। CLI থেকে:
heroku certs:info -a your-app-name
আউটপুটে সার্টিফিকেট, ইস্যুকারী CA, মেয়াদ শেষ হওয়ার তারিখ, এবং এটি যে ডোমেইনগুলো কভার করে তা তালিকাভুক্ত থাকে। তারপর একটি ব্রাউজারে https:// এর মাধ্যমে আপনার সাইট খুলুন, প্যাডলকটি উপস্থিত আছে কিনা তা পরীক্ষা করুন, এবং সার্টিফিকেট চেইনটি সম্পূর্ণ কিনা এবং প্রোটোকলগুলো সঠিকভাবে কনফিগার করা আছে কিনা তা নিশ্চিত করতে আমাদের SSL চেকার দিয়ে একটি গভীর বহিরাগত স্ক্যান চালান।
আজ অর্ডার করার সময় SSL শংসাপত্রে 10% সংরক্ষণ করুন!
দ্রুত ইস্যু, শক্তিশালী এনক্রিপশন, 99.99% ব্রাউজার বিশ্বাস, নিবেদিত সমর্থন, এবং 25 দিনের অর্থ ফেরত গ্যারান্টি। কুপন কোড: SAVE10


