আমি কোনও সাইটের সাথে একটি https বাইন্ডিং যুক্ত করার চেষ্টা করার প্রক্রিয়াটি পেরেছিলাম এবং এটি বেশ বেদনাদায়ক হতে পারে। প্রতিটি পদক্ষেপটি সম্পাদন করার জন্য অনেকগুলি উপায় রয়েছে এবং প্রত্যেকেরই সমস্যা রয়েছে। আমি চূড়ান্ত সমাধানটি রেখে চলেছি এই আশায় যে কেউ এটির কাজে লাগবে।
এই সমাধানটি ধরে নেয় যে আপনি আইআইএস ইনস্টল করেছেন এবং একটি ওয়েব সাইট সংজ্ঞায়িত হয়েছে। এই পোস্টের উদ্দেশ্যে স্যাম্পল.কমটস.কম সাইটে কল করুন। ধরে নিন যে আপনি যে নমুনা.কন্টোস.কম.পিএফএক্স ফাইলটিও ব্যবহার করতে চান তাতে একটি শংসাপত্র রয়েছে।
প্রথম পদক্ষেপটি ফাইল থেকে শংসাপত্রটি আমদানি করা।
$certPwd = ConvertTo-SecureString -String "password" -Force -AsPlainText
$webServerCert = Import-PfxCertificate -FilePath c:\some\folder\sample.contoso.com.pfx -CertStoreLocation Cert:\LocalMachine\My -Password $certPwd
এটি যথেষ্ট হলে ভাল হবে। এবং কিছু ক্ষেত্রে এটি হতে পারে। তবে, আমার কাছে এটি ব্যক্তিগত কীতে সঠিক অ্যাক্সেস ছাড়াই শংসাপত্রটি রেখে গেছে। এটি পাওয়ারশেল ত্রুটির কারণে "একটি নির্দিষ্ট লগন সেশনটির উপস্থিতি নেই already এটি ইতিমধ্যে বন্ধ হয়ে যেতে পারে" যখন আমি বাইন্ডিংয়ে শংসাপত্র যুক্ত করতে যাই (সেই পদক্ষেপটি পরে দেখুন)। সুতরাং, পরবর্তী পদক্ষেপটি প্রাইভেট কীটির জন্য এসিএল ঠিক করা।
$privateKeyFilename = $webServerCert.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName
$privateKeyFullPath = "c:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\"+$privateKeyFilename
$aclRule = "SYSTEM", "Full", "Allow"
$aclEntry = New-Object System.Security.AccessControl.FileSystemAccessRule $aclRule
$privateKeyAcl = (Get-Item $privateKeyFullPath).GetAccessControl("Access")
$privateKeyAcl.AddAccessRule($aclEntry)
Set-Acl $privateKeyFullPath $privateKeyAcl
এটি যদি এমন ফোল্ডারটি উত্তরাধিকার সূত্রে না পেয়ে থাকে তবে স্থানীয় সিস্টেমটি ব্যক্তিগত কীতে সম্পূর্ণ অ্যাক্সেসের অনুমতি দেবে।
আপনি যদি ইতিমধ্যে ইনস্টল থাকা শংসাপত্র পেতে চান তবে আপনার এটির জন্য হ্যাশ দরকার এবং এটি গেট-আইটেমের মতো পুনরুদ্ধার করতে পারেন:
$webServerCert = get-item Cert:\LocalMachine\My\XFX2DX02779XFD1F6F4X8435A5X26ED2X8DEFX95
পরবর্তী পদক্ষেপটি বাইন্ডিং তৈরি করা।
New-WebBinding -Name sample.contoso.com -IPAddress * -Port 443 -Protocol "https"
এটা মনে রাখা গুরুত্বপূর্ণ যে "https" কেস সংবেদনশীল। আপনি যদি তার পরিবর্তে "এইচটিটিপিএস" ব্যবহার করেন তবে আপনি একটি সত্যই আলাদা বাইন্ডিং ফলাফল পাবেন।
এই বাইন্ডিংটিতে এটির সাথে এখনও কোনও শংসাপত্র সংযুক্ত নেই, সুতরাং সর্বশেষ পদক্ষেপটি শংসাপত্রটি সংযুক্ত করা। যদি শংসাপত্রটি সঠিকভাবে বিশ্বাসযোগ্য হয় এবং সুরক্ষা সঠিক হয় তবে এই পদক্ষেপটি সফল হওয়া উচিত। যদিও শংসাপত্রের সাথে কোনও সমস্যা থাকলে তা চূড়ান্ত হতে পারে।
$bind = Get-WebBinding -Name $webSiteDNSName -Protocol https
$bind.AddSslCertificate($webServerCert.GetCertHashString(), "my")
যদি এটি কোনও লগন সেশন সম্পর্কে কোনও বার্তা দিয়ে ব্যর্থ হয় তবে শংসাপত্রটিতে কিছু সমস্যা হতে পারে। আরও তথ্যের জন্য ইভেন্ট দর্শকের পর্যালোচনা করুন। আমার প্রচেষ্টার সময়, আমি সুরক্ষা লগে 5061 ইভেন্টটি পেয়েছি। এটি ব্যর্থ হয়ে গেলে, এটি দেখিয়েছিল যে ওপেনকে 80090016 (কীসেটটি বিদ্যমান নেই) দিয়ে ব্যর্থ হয়েছে। এবং ব্যর্থতাটি ছিল কারণ SYSTEM- র ব্যক্তিগত কীতে অ্যাক্সেস নেই।
Https বাইন্ডিং তৈরি করার জন্য এটি আমার পক্ষে যথেষ্ট ছিল। HTTP বাইন্ডিংটি নিউ-ওয়েবসাইটের সেমিডলেট ব্যবহারের একটি উপ-উত্পাদন ছিল। যদি এটি নিখরচায় না আসে, আমি পোর্ট 80 বাই-বাইন্ডিংটি নিউ-ওয়েববাইন্ডিং সেমিডলেটের সাথে চ্যালেঞ্জ হিসাবে খুঁজে পেলাম না।