এই গাইডে আমরা দেখাবো কিভাবে Windows Server 2019/2016/2012 R2-এ চলমান IIS ওয়েব সার্ভারে একটি সাইটের জন্য ফ্রি TLS/SSL Let's Encrypt সার্টিফিকেট ইস্যু, ইনস্টল এবং বাইন্ড করতে হয়।
সুচিপত্র
- Let's Encrypt এবং Windows-এর জন্য ACME ক্লায়েন্ট
- WACS ক্লায়েন্ট দিয়ে IIS-এ Let's Encrypt TLS সার্টিফিকেট ইনস্টলেশন
- IIS URL Rewrite ব্যবহার করে HTTP থেকে HTTPS রিডাইরেক্ট
- RDS Gateway & Web Access-এ Let's Encrypt সার্টিফিকেট ব্যবহার
Let's Encrypt এবং Windows-এর জন্য ACME ক্লায়েন্ট
ওয়েবসাইটের TLS/SSL সার্টিফিকেট পাবলিক নেটওয়ার্কে ট্রান্সফার হওয়া ইউজার ডেটা ম্যান-ইন-দ-মিডল (MITM) আটাক থেকে রক্ষা করে এবং ডেটা ইন্টিগ্রিটি নিশ্চিত করে। নন-প্রফিট সার্টিফিকেশন অথরিটি Let's Encrypt API ব্যবহার করে HTTPS এনক্রিপশনের জন্য ফ্রি X.509 এনক্রিপশন TLS সার্টিফিকেট অটোমেটিক্যালি ইস্যু করতে দেয়। শুধুমাত্র ডোমেইন ভ্যালিডেশন वाले সার্টিফিকেট ইস্যু হয় যা ৯০ দিনের জন্য ভ্যালিড থাকে (এক সপ্তাহে এক ডোমেইনের জন্য ৫০টি সার্টিফিকেটের লিমিট)। কিন্তু আপনি সিম্পল শিডিউলিং ব্যবহার করে আপনার ওয়েবসাইটের SSL সার্টিফিকেট অটোমেটিক্যালি রিনিউ করতে পারেন।
Let's Encrypt API ইন্টারফেস যা সার্টিফিকেটগুলো অটোমেটিক্যালি ইস্যু করার জন্য ব্যবহার হয়, তাকে Automated Certificate Management Environment (ACME) API বলা হয়। Windows সিস্টেমের জন্য ৩টি সবচেয়ে জনপ্রিয় ACME API ক্লায়েন্ট ইমপ্লিমেন্টেশন রয়েছে:
- Windows ACME Simple (WACS) — IIS-এ চলমান ওয়েবসাইটগুলোর মধ্যে থেকে একট সিলেক্ট করে SSL সার্টিফিকেট ইস্যু এবং সেটিকে স্পেসিফিক সাইটের সাথে বাইন্ড করার জন্য একটি কমান্ড প্রম্পট টুল;
- PowerShell ACMESharp মডিউল — Let's Encrypt সার্ভারদের সাথে ACME API ওভার ইন্টারঅ্যাক্ট করার জন্য(cmdlets সমুহসহ একটি PowerShell লাইব্রেরি);
- Certify — ACME API ব্যবহার করে SSL সার্টিফিকেট ইন্টারঅ্যাক্টিভভাবে ম্যানেজ করার জন্য একটি Windows গ্রাফিক্যাল টুল।
WACS ক্লায়েন্ট দিয়ে IIS-এ Let's Encrypt TLS সার্টিফিকেট ইনস্টলেশন
Let's Encrypt থেকে SSL সার্টিফিকেট পাওয়ার সবচেয়ে সহজ উপায় হলো কনসোল টুল Windows ACME Simple (WACS) ব্যবহার করা (পূর্বে এই প্রজেক্টের নাম LetsEncrypt-Win-Simple ছিল)। এটি একটি সিম্পল উইজার্ড যা IIS-এ চলমান ওয়েবসাইটগুলোর মধ্যে থেকে একট সিলেক্ট করতে দেয়, অটোমেটিক্যালি SSL সার্টিফিকেট ইস্যু করে এবং সেটিকে সাইটের সাথে বাইন্ড করে।
মান লিন, আপনার Windows Server 2016-এ একটি IIS ওয়েবসাইট চলছে। আপনার টাস্ক হলো ফ্রি SSL সার্টিফিকেট Let's Encrypt থেকে ইনস্টল করে ওয়েবসাইটকে HTTPS মোডে স্যুইচ করা।
GitHub-এ서 WACS ক্লায়েন্টের লেটেস্ট রিলিজ ডাউনলোড করুন: https://github.com/PKISharp/win-acme/releases (আমার কেসে এটি v2.0.10 ভার্সন — ফাইলের নাম win-acme.v2.0.10.444.zip)।

জিপ আর্কাইভটি সার্ভারে নিচের ডিরেক্টরিতে এক্সট্র্যাক্ট করুন যেখানে IIS ইনস্টল করা আছে: c:\inetpub\letsencrypt
Win-Acme ব্যবহার করতে .NET Framework 4.7.2 বা উচ্চতর ভার্সন ইনস্টল থাকতে হবে (আপনার ইনস্টল করা .NET Framework ভার্সন কীভাবে চেক করবেন?)।

এলিভেটেড কমান্ড প্রম্পট খুলুন, c:\inetpub\letsencrypt ডিরেক্টরিতে যান এবং wacs.exe চালান। এটি একটি ইন্টারঅ্যাক্টিভ Let's Encrypt সার্টিফিকেট জেনারেশন এবং IIS সাইটে বাইন্ডিং উইজার্ড চালু করবে। দ্রুত নতুন সার্টিফিকেট তৈরি করতে N: — Create new certificates (simple for IIS) সিলেক্ট করুন।

পরবর্তীতে সার্টিফিকেট টাইপ সিলেক্ট করতে হবে। আমাদের উদাহরণে এলিয়াস (multiple SAN — Subject Alternative Name) সহ সার্টিফিকেট ব্যবহার করার প্রয়োজন নেই, তাই শুধু 1. Single binding of an IIS site আইটেমটি সিলেক্ট করুন। যদি Wildcard সার্টিফিকেট দরকার হয়, তবে অপশন 3 সিলেক্ট করুন।
তারপর ইউটিলিটি IIS-এ চলমান ওয়েবসাইটের লিস্ট দেখাবে এবং সার্টিফিকেট ইস্যু করার জন্য একটি সাইট সিলেক্ট করতে বলবে।

আপনার ইমেইল ঠিকানা দিন যাতে সার্টিফিকেট রিনিউয়াল সমস্যা এবং অন্যান্য ক্রিটিক্যাল মেসেজ ও Abu.se নোটিফিকেশন পাঠানো হয় (কমা দিয়ে একাধিক ইমেইল ঠিকানা দিতে পারেন)। টার্মস অফ ইউজ এক্সেপ্ট করুন এবং Windows ACME Simple Let's Encrypt সার্ভারদের সাথে কানেক্ট होकर আপনার ওয়েবসাইটের জন্য নতুন SSL সার্টিফিকেট অটোমেটিক্যালি জেনারেট করার চেষ্টা করবে।

IIS-এ SSL Let's Encrypt সার্টিফিকেট জেনারেট ও ইনস্টল করার প্রসেস সম্পূর্ণ অটোমেটেড।
ডিফল্টভাবে ডোমেইন ভ্যালিডেশন http-01 validation (SelfHosting) মোডে হয়। এর জন্য আপনার ডোমেইন DNS রেকর্ড আপনার ওয়েব সার্ভারকে পয়েন্ট করে থাকতে হবে। WACS ম্যানুয়াল মোডে (full options) চালালে আপনি ভ্যালিডেশন টাইপ সিলেক্ট করতে পারেন — 4 [http-01] Create temporary application in IIS (recommended)। এই কেসে IIS ওয়েব সার্ভারে একটি ছোট অ্যাপ্লিকেশন তৈরি হবে যার মাধ্যমে Let's Encrypt সার্ভারগুলো ডোমেইন ভ্যালিডেশন করবে।
নোট. TLS/HTTP ভ্যালিডেশনের সময় আপনার সাইট অবশ্যই ইন্টারনেট থেকে এর পূর্ণ DNS নাম দিয়ে HTTP (80/TCP) এবং HTTPS (443/TCP) প্রোটোকল ব্যবহার করে অ্যাক্সেসযোগ্য হতে হবে।
WACS টুল সার্টিফিকেটের প্রাইভেট কি (*.pem), সার্টিফিকেটটি, এবং অন্যান্য কিছু ফাইল C:\Users\%username%\AppData\Roaming\letsencrypt-win-simple-এ সেভ করে। তারপর এটি পটভূমিতে জেনারেট করা Let's Encrypt SSL সার্টিফিকেটটি ইনস্টল করবে এবং আপনার IIS সাইটের সাথে বাইন্ড করবে। যদি সাইটে ইতিমধ্যে কোনো SSL সার্টিফিকেট ইনস্টল থাকে (যেমন, self-signed cert), তবে সেটি নতুন সার্টিফিকেট দিয়ে রিপ্লেস হয়ে যাবে।
IIS Manager-এ আপনার ওয়েবসাইটের Site Binding সেটিংস খুলুন এবং যাচাই করুন যে এটি Let's Encrypt Authority X3-এ ইস্যু করা সার্টিফিকেট ব্যবহার করছে।

যদি আপনার Windows Trusted Root Certification Authorities আপডেট করা থাকে, তবে এই সার্টিফিকেট আপনার কম্পিউটারে trusted হিসেবে দেখাবে।
Let's Encrypt IIS সার্টিফিকেটটি কম্পিউটার সার্টিফিকেট স্টোরে Web Hosting → Certificates-এ পাবেন।

Windows ACME Simple Windows Task Scheduler-এ একটি নতুন জব তৈরি করে (win-acme-renew (acme-v02.api.letsencrypt.org)) যাতে সার্টিফিকেটটি অটোমেটিক্যালি রিনিউ হয়। টাস্কটি প্রতিদিন চলে, এবং সার্টিফিকেট রিনিউয়াল ৬০ দিন পরformed হয়। এই টাস্ক নিচের কমান্ডটি চালায়:
C:\inetpub\letsencrypt\wacs.exe --renew --baseuri "https://acme-v02.api.letsencrypt.org"
আপনি একই কমান্ড ব্যবহার করে ম্যানুয়ালি Let's Encrypt সার্টিফিকেট আপডেট করতে পারেন।

IIS URL Rewrite ব্যবহার করে HTTP থেকে HTTPS রিডাইরেক্ট
সকল ইনকামিং HTTP ট্রাফিককে HTTPS ওয়েবসাইট URL-এ রিডাইরেক্ট করতে Microsoft URL Rewrite Module ইনস্টল করুন (https://www.iis.net/downloads/microsoft/url-rewrite), এবং নিশ্চিত করুন যে সাইট সেটিংসে Require SSL অপশনটি ডিজেবল করা আছে। এখন web.config-এ রিরাইট রুল দিয়ে রিডাইরেক্ট কনফিগার করুন:
<system.webServer> <rewrite> <rules> <rule name=”HTTP to HTTPS Redirect” enabled=”true” stopProcessing=”true”> <match url=”(.*)” /> <conditions> <add input=”{HTTPS}” pattern=”off” ignoreCase=”true” /> </conditions> <action type=”Redirect” url=”https://{HTTP_HOST}/{R:1}” appendQueryString=”true” redirectType=”Permanent” /> </rule> </rules> </rewrite> </system.webServer>
আপনি URL Rewrite এক্সটেনশন ব্যবহার করে IIS Manager GUI-থroughও ট্রাফিক রিডাইরেক্ট কনফিগার করতে পারেন। Sites → yoursitename → URL Rewrite সিলেক্ট করুন।

নতুন রুল তৈরি করুন: Add Rule → Blank rule।
রুলের নাম দিন এবং নিচের প্যারামিটার মানগুলো পরিবর্তন করুন:
- Requested URL: Matches the Pattern
- Using: Regular Expressions
- Pattern: (.*)

Conditions সেকশনে Logical Grouping: Match All সেট করে Add ক্লিক করুন। নিচের সেটিংস দিন:
- Condition input: {HTTPS}
- Check if input string: Matches the Pattern
- Pattern: ^OFF$

এখন Action ব্লকে নিচের সেটিংস দিন:
- Action Type: Redirect
- Redirect URL: https://{HTTP_HOST}/{R:1}
- Redirect type: Permanent (301)
ব্রাউজার খুলুন এবং আপনার সাইট HTTP অ্যাড্রেস দিয়ে খোলার চেষ্টা করুন; আপনি অটোমেটিক্যালি HTTPS URL-এ রিডাইরেক্ট হয়ে যাবেন।
RDS Gateway & Web Access-এ Let's Encrypt সার্টিফিকেট ব্যবহার
যদি আপনি বাহ্যিক ইউজারদের কর্পোরেট নেটওয়ার্কে কানেক্ট করার জন্য RDS Gateway বা RDS Web Access ব্যবহার করেন, তবে আপনি সেলফ-सাইনড সার্টিফিকেটের বদলে Let's Encrypt-এর trusted SSL সার্টিফিকেট ব্যবহার করতে পারেন। Windows Server-এ Remote Desktop Services সিকিউর করার জন্য Let's Encrypt সার্টিফিকেট সঠিকভাবে ইনস্টল করার পদ্ধতি দেখে নিই।
যদি RD Gateway সার্ভারে RDSH রোলও ইনস্টল থাকে, তবে আপনাকে নন-অ্যাডমিন ইউজারদের WACS ফাইলগুলো থাকা ডিরেক্টরি (আমার উদাহরণে c:\inetpub\letsencrypt) এবং Let's encrypt সার্টিফিকেট ও কিগুলো থাকা ডিরেক্টরি (C:\ProgramData\win-acme) অ্যাক্সেস করা থেকে বাধা দিতে হবে।
তারপর RD Gateway সার্ভারে wacs.exe চালান, উপরের মত করে। পছন্দসই IIS সাইট সিলেক্ট করুন (সাধারণত এটি Default Web Site)। Let's Encrypt আপনাকে একটি নতুন সার্টিফিকেট ইস্যু করবে এবং সেটিকে IIS ওয়েবসাইটের সাথে বাইন্ড করবে, এবং Task Scheduler-এ অটোমেটিক সার্টিফিকেট রিনিউয়াল টাস্ক তৈরি হবে।
আপনি এই সার্টিফিকেটটি ম্যানুয়ালি এক্সপোর্ট করে SSL বাইন্ডিং দিয়ে প্রয়োজনীয় RDS সার্ভিসগুলোর সাথে বাইন্ড করতে পারেন। কিন্তু Let's Encrypt সার্টিফিকেট প্রতি ৬০ দিন পর রিনিউ হলে এই স্টেপগুলো প্রতি বার ম্যানুয়ালি করতে হবে।
আমরা PowerShell স্ক্রিপ্ট ব্যবহার করে Let's Encrypt সার্টিফিকেট আপডেট হওয়ার পর SSL সার্টিফিকেটকে RDS Gateway-এ অটোমেটিক্যালি বাইন্ড করতে পারি।
win-acme প্রজেক্টে একটি রেডি PowerShell স্ক্রিপ্ট রয়েছে — ImportRDGateway.ps1 (https://github.com/PKISharp/win-acme/tree/master/dist/Scripts), যা আপনাকে Remote Desktop Services-এর জন্য সিলেক্ট করা SSL সার্টিফিকেট ইনস্টল করতে দেয়। এই স্ক্রিপ্টের মূল খামি হলো আপনাকে নতুন সার্টিফিকেটের থাম্বপ্রিন্ট ম্যানুয়ালি স্পেসিফাই করতে হয়:
ImportRDGateway.ps1 <certThumbprint>
স্পেসিফাইড IIS সাইট থেকে সার্টিফিকেট থাম্বপ্রিন্ট অটোমেটিক্যালি পেতে মডিফাইড স্ক্রিপ্ট ImportRDGateway_Cert_From_IIS.ps1 ব্যবহার করুন (ImportRDGateway.ps1-র উপর ভিত্তি করে তৈরি)।
আপনি এই স্ক্রিপ্টটি ম্যানুয়ালি চালাতে পারেন:
powershell -File ImportRDGateway_Cert_From_IIS.ps1
যদি আপনার RDS Gateway IIS "Default Web Site"-এ ইন্ডেক্স ০-এ চলে, তবে স্ক্রিপ্টটি পরিবর্তন ছাড়া ব্যবহার করা যাবে।
IIS-এ সাইট আইডি পেতে PowerShell কনসোল খুলুন এবং চালান:
Import-Module WebAdministration
Get-ChildItem IIS:Sites|ft -AutoSize
ID কলামে আপনার সাইটের ইন্ডেক্স দেখাবে, সেখান থেকে ১ বিয়োগ করুন। ফলাফল ইন্ডেক্সটি PowerShell স্ক্রিপ্টের লাইন ২৭-এ 0-র বদলে ব্যবহার করুন:
$NewCertThumbprint = (Get-ChildItem IIS:SSLBindings)[0].Thumbprint

এখন win-acme-renew শিডিউলার টাস্ক খুলুন, Actions ট্যাবে একটি নতুন অ্যাকশন যোগ করুন যা SSL সার্টিফিকেট আপডেট হওয়ার পর ImportRDGateway_Cert_From_IIS.ps1 স্ক্রিপ্টটি চালাবে।
PowerShell এক্সিকিউশন পলিসি পরিবর্তন না করে স্ক্রিপ্ট চালানোর জন্য নিচের কমান্ডটি ব্যবহার করুন:
PowerShell.exe -ExecutionPolicy Bypass -File c:\inetpub\letsencrypt\ImportRDGateway_Cert_From_IIS.ps1

এখন Let's Encrypt সার্টিফিকেট রিনিউ হওয়ার সাথে সাথে RDS-এ SSL সার্টিফিকেট বাইন্ড করার স্ক্রিপ্টটি এক্সিকিউট হবে। এই কেসে RD Gateway সার্ভিস অটোমেটিক্যালি রিস্টার্ট হবে কমান্ড দিয়ে:
Restart-Service TSGateway
[alert] TSGateway সার্ভিস রিস্টার্ট হলে বর্তমান সব ইউজার সেশন ডিসকানেক্ট হয়ে যাবে, তাই সার্টিফিকেট রিনিউয়াল টাস্কের ফ্রিকোয়েন্সি ৬০ দিনে একবার রাখা সুপারিশ করা হয়।[/alert]