একটি স্ক্রিপ্ট বা একটি ডিজিটাল স্বাক্ষর সহ একটি এক্সিকিউটেবল ব্যবহারকারীকে নিশ্চিত করতে দেয় যে একটি ফাইল আসল এবং এর কোড তৃতীয় পক্ষ দ্বারা পরিবর্তন করা হয়নি। ডিজিটাল সার্টিফিকেট ব্যবহার করে *.ps1 স্ক্রিপ্ট ফাইলের কোড সাইন করার জন্য PowerShell-এর বর্তমান সংস্করণে বিল্ট-ইন টুল রয়েছে।
আপনি একটি বিশেষ ধরনের শংসাপত্র – কোড সাইনিং ব্যবহার করে একটি PowerShell স্ক্রিপ্টে স্বাক্ষর করতে পারেন . এই শংসাপত্রটি একটি বহিরাগত বাণিজ্যিক শংসাপত্র কর্তৃপক্ষ (AC), একটি অভ্যন্তরীণ এন্টারপ্রাইজ CA থেকে প্রাপ্ত করা যেতে পারে বা আপনি একটি স্ব-স্বাক্ষরিত শংসাপত্র ব্যবহার করতে পারেন৷
ধরুন, আপনার ডোমেনে PKI পরিষেবাগুলি (অ্যাক্টিভ ডিরেক্টরি সার্টিফিকেট পরিষেবা) স্থাপন করা হয়েছে। আসুন https://CA-server-name/certsrv এ গিয়ে একটি নতুন শংসাপত্রের অনুরোধ করি এবং কোড সাইনিং সহ একটি নতুন শংসাপত্রের অনুরোধ করি টেমপ্লেট (এই টেমপ্লেটটি প্রথমে সার্টিফিকেশন অথরিটি কনসোলে সক্রিয় করা আবশ্যক)।
এছাড়াও, ব্যবহারকারী mmc স্ন্যাপ-ইন শংসাপত্র -> আমার অ্যাকাউন্ট -> ব্যক্তিগত -> সমস্ত কাজ -> একটি নতুন শংসাপত্রের অনুরোধ থেকে PowerShell স্ক্রিপ্টগুলিতে স্বাক্ষর করার জন্য একটি শংসাপত্রের অনুরোধ করতে পারেন৷
আপনি যদি ম্যানুয়ালি একটি শংসাপত্রের অনুরোধ করেন, তাহলে আপনার কাছে একটি .cer সহ একটি x509 সার্টিফিকেট ফাইল থাকা উচিত এক্সটেনশন এই শংসাপত্রটি আপনার কম্পিউটারের স্থানীয় শংসাপত্র স্টোরে ইনস্টল করা আবশ্যক৷
৷কম্পিউটারের বিশ্বস্ত রুট শংসাপত্রে শংসাপত্র যোগ করতে আপনি নিম্নলিখিত PowerShell কমান্ডগুলি ব্যবহার করতে পারেন:
$certFile =এক্সপোর্ট-সার্টিফিকেট -Cert $cert -FilePath C:\ps\certname.cer
Import-Certificate -CertStoreLocation Cert:\LocalMachine\AuthRoot -FilePath $certFile.FullName
আপনি যদি একটি স্ব-স্বাক্ষরিত শংসাপত্র ব্যবহার করতে চান, DNS নামের testPC1 সহ একটি CodeSigning শংসাপত্র তৈরি করতে New-SelfSigned Certificate cmdlet ব্যবহার করুন:
New-SelfSigned Certificate -DnsName testPC1 -Type CodeSigning
$cert =New-SelfSigned Certificate -Subject "Cert for Code Signing" -Type CodeSigningCert -DnsName test1 -CertStoreLocation:\Location>
শংসাপত্র তৈরি হওয়ার পরে, সার্টিফিকেট ম্যানেজার কনসোল (certmgr.msc
ব্যবহার করে এটিকে ইন্টারমিডিয়েট কন্টেইনার থেকে বিশ্বস্ত রুটে নিয়ে যান। )।
আপনি শংসাপত্র পাওয়ার পরে, আপনি শুধুমাত্র স্বাক্ষরিত স্ক্রিপ্ট চালানোর অনুমতি দেওয়ার জন্য PowerShell স্ক্রিপ্ট এক্সিকিউশন নীতি কনফিগার করতে পারেন। ডিফল্টরূপে, Windows 10/ Windows Server 2016-এ PowerShell এক্সিকিউশন নীতি সীমাবদ্ধ সেট করা আছে। (যেকোনো পাওয়ারশেল স্ক্রিপ্টের এক্সিকিউশন ব্লক করে)।
File C:\ps\script.ps1 cannot be loaded because running scripts is disabled on this system.
শুধুমাত্র স্বাক্ষরিত PS1 স্ক্রিপ্টগুলি চালানোর অনুমতি দেওয়ার জন্য, আপনি PowerShell Eecution পলিসিকে AllSigned বা RemoteSigned-এ পরিবর্তন করতে পারেন (একমাত্র পার্থক্যের সাথে যে RemoteSigned শুধুমাত্র ইন্টারনেট থেকে ডাউনলোড করা স্ক্রিপ্টগুলির জন্য একটি স্বাক্ষর প্রয়োজন):
Set-ExecutionPolicy AllSigned –Force
এই মোডে, স্বাক্ষরবিহীন PowerShell স্ক্রিপ্ট চালানোর সময়, একটি ত্রুটি প্রদর্শিত হয়:
File C:\script.ps1 cannot be loaded. The file script.ps1 is not digitally signed. You cannot run this script on the current system.এছাড়াও আপনি স্ক্রিপ্ট এক্সিকিউশন চালু করুন ব্যবহার করে স্বাক্ষরিত পাওয়ারশেল স্ক্রিপ্টগুলি চালানোর অনুমতি দিতে পারেন কম্পিউটার কনফিগারেশন -> নীতি -> প্রশাসনিক টেমপ্লেট -> উইন্ডোজ উপাদান -> উইন্ডোজ পাওয়ারশেলের অধীনে গ্রুপ নীতি প্যারামিটার। প্যারামিটার মান পরিবর্তন করুন শুধু স্বাক্ষরিত স্ক্রিপ্টগুলিকে অনুমতি দিন৷ .
এখন PowerShell স্ক্রিপ্ট ফাইল সাইন করার দিকে এগিয়ে যাওয়া যাক। প্রথমত, আপনাকে বর্তমান ব্যবহারকারীর স্থানীয় শংসাপত্রের দোকান থেকে CodeSign শংসাপত্রটি পেতে হবে। প্রথমে, আসুন কোড সাইন করতে ব্যবহার করা যেতে পারে এমন সমস্ত শংসাপত্রের তালিকা করা যাক:
Get-ChildItem cert:\CurrentUser\my –CodeSigningCert
আমাদের ক্ষেত্রে, আমরা ব্যক্তিগত ব্যবহারকারী শংসাপত্র স্টোর থেকে প্রথম শংসাপত্র নেব এবং $cert ভেরিয়েবলে সংরক্ষণ করব:
$cert =(Get-ChildItem cert:\CurrentUser\my –CodeSigningCert)[0]
আপনি যদি আপনার শংসাপত্রটি বিশ্বস্ত রুট শংসাপত্রের দোকানে স্থানান্তরিত করে থাকেন তবে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
$cert =(Get-ChildItem Cert:\LocalMachine\AuthRoot –CodeSigningCert)[0]
তারপর আপনি আপনার PowerShell স্ক্রিপ্টের সাথে PS1 ফাইলে স্বাক্ষর করতে এই শংসাপত্রটি ব্যবহার করতে পারেন:
Set-AuthenticodeSignature -Certificate $cert -FilePath C:\PS\testscript.ps1
আপনি নিম্নলিখিত কমান্ডটিও ব্যবহার করতে পারেন (এই ক্ষেত্রে, আমরা DnsName দ্বারা আগে তৈরি স্ব-স্বাক্ষরিত শংসাপত্র নির্বাচন করি):
Set-AuthenticodeSignature C:\PS\test_script.ps1 @(gci Cert:\LocalMachine\AuthRoot -DnsName testPC1 -codesigning)[0]
-TimestampServer "https://timestamp.verisign.com/scripts/timstamp.dll"
আপনি যদি স্ক্রিপ্টে স্বাক্ষর করার জন্য একটি সাধারণ SSL/TLS শংসাপত্র ব্যবহার করার চেষ্টা করেন, একটি ত্রুটি প্রদর্শিত হবে:
Set-AuthenticodeSignature: Cannot sign code. The specified certificate is not suitable for code signing.
আপনি ফোল্ডারে একবারে সমস্ত PowerShell স্ক্রিপ্ট ফাইল সাইন ইন করতে পারেন:
Get-ChildItem c:\ps\*.ps1| সেট-প্রমাণিক কোড স্বাক্ষর - শংসাপত্র $Cert
এখন আপনি PowerShell স্ক্রিপ্ট ফাইলটি সঠিকভাবে স্বাক্ষর করা হয়েছে কিনা তা পরীক্ষা করতে পারেন। আপনি Get-AuthenticodeSignature cmdlet ব্যবহার করতে পারেন বা PS1 ফাইলের বৈশিষ্ট্য খুলতে পারেন এবং ডিজিটাল স্বাক্ষরে যেতে পারেন ট্যাব।
Get-AuthenticodeSignature c:\ps\test_script.ps1 | ft -AutoSize
যদি একটি অজানা ত্রুটি
Set-AuthenticodeSignature কমান্ডটি কার্যকর করার সময় সতর্কতা উপস্থিত হয়, তারপর এই শংসাপত্রটি বিশ্বস্ত নয়, কারণ ব্যবহারকারীর ব্যক্তিগত শংসাপত্রের দোকানে অবস্থিত৷
আপনাকে এটিকে বিশ্বস্ত রুট শংসাপত্রে স্থানান্তর করতে হবে (সন্দেহজনক শংসাপত্রের জন্য পর্যায়ক্রমে উইন্ডোজ শংসাপত্র স্টোর চেক করতে এবং বিশ্বস্ত রুট শংসাপত্রের তালিকা আপডেট করতে ভুলবেন না):
মুভ-আইটেম -পথ $cert.PSPath -গন্তব্য "Cert:\LocalMachine\Root"
এখন একটি PS1 ফাইলের স্বাক্ষর যাচাই করার সময়, বৈধ স্থিতি ফেরত দেওয়া উচিত৷
একটি PowerShell স্ক্রিপ্ট ফাইলে স্বাক্ষর করার সময়, Set-AuthenticodeSignature cmdlet PS1 পাঠ্য ফাইলের শেষে একটি ডিজিটাল স্বাক্ষর ব্লক যোগ করে:
# SIG # Begin signature block ........... ........... # SIG # End signature block
স্বাক্ষর ব্লকে স্ক্রিপ্টের হ্যাশ থাকে, যা ব্যক্তিগত কী ব্যবহার করে এনক্রিপ্ট করা হয়।
আপনি যখন প্রথমবার স্ক্রিপ্টটি চালানোর চেষ্টা করবেন, একটি সতর্কতা প্রদর্শিত হবে:
Do you want to run software from this untrusted publisher? File C:\PS\script.ps1 is published by CN=testPC1 and is not trusted on your system. Only run scripts from trusted publishers.
আপনি যদি [A] সর্বদা স্ক্রিপ্টের প্রথম রানে চালান নির্বাচন করেন , পরের বার যখন আপনি স্ক্রিপ্টটি চালাবেন, এই শংসাপত্রটি ব্যবহার করে স্বাক্ষরিত হবেন, তখন একটি সতর্কতা আর প্রদর্শিত হবে না৷
এই সতর্কতাটি উপস্থিত থেকে রোধ করতে, আপনাকে বিশ্বস্ত প্রকাশকদের কাছেও শংসাপত্রটি অনুলিপি করতে হবে শংসাপত্র কর্তৃপক্ষ। বিশ্বস্ত প্রকাশক -> শংসাপত্রে শংসাপত্রটি অনুলিপি করতে শংসাপত্র কনসোলে কপি-পেস্ট অপারেশনটি ব্যবহার করুন৷
স্বাক্ষরিত PowerShell স্ক্রিপ্ট এখন অবিশ্বস্ত প্রকাশক বিজ্ঞপ্তি প্রদর্শন ছাড়াই চলবে৷
টিপ . CA রুট শংসাপত্র এবং স্ক্রিপ্ট স্বাক্ষর করার জন্য ব্যবহৃত শংসাপত্রকে বিশ্বাস করতে হবে (অন্যথায়, স্ক্রিপ্টটি চলবে না)। আপনি GPO ব্যবহার করে ডোমেন কম্পিউটারে কেন্দ্রীয়ভাবে সার্টিফিকেট স্থাপন করতে পারেন। সার্টিফিকেটগুলিকে GPO-এর নিম্নলিখিত পাবলিক কী বিভাগে স্থাপন করতে হবে:কম্পিউটার কনফিগারেশন -> নীতি -> উইন্ডোজ সেটিংস -> নিরাপত্তা সেটিংস -> সর্বজনীন কী নীতি -> বিশ্বস্ত রুট সার্টিফিকেশন কর্তৃপক্ষ এবং বিশ্বস্ত প্রকাশকরা .
যদি রুট সার্টিফিকেট অবিশ্বস্ত হয়, তাহলে আপনি যখন PowerShell স্ক্রিপ্ট চালাবেন, একটি ত্রুটি দেখা যাবে:
A certificate chain processed, but terminated in a root certificate which is not trusted by the trust provider.
আপনি স্বাক্ষরিত PowerShell স্ক্রিপ্ট ফাইলের কোড পরিবর্তন করলে কি হবে? স্ক্রিপ্টের বিষয়বস্তু পরিবর্তন করা হয়েছে এই বিজ্ঞপ্তির মাধ্যমে এটি চালানোর প্রচেষ্টা ব্লক করা হবে।
File xx.ps1 cannot be loaded. The contents of file xx.ps1 might have been changed by an unauthorized user or process, because the hash of the file does not match the hash stored in the digital signature. The script cannot run on the specified system.
Get-AuthenticodeSignature cmdlet ব্যবহার করে স্ক্রিপ্টের স্বাক্ষর যাচাই করার চেষ্টা করুন। যদি গণনা করা হ্যাশ স্বাক্ষরের হ্যাশের সাথে মেলে না, তাহলে বার্তা HashMismatch
প্রদর্শিত হয়৷
সুতরাং, স্বাক্ষরিত PS1 স্ক্রিপ্টের কোডের যেকোনো পরিবর্তনের জন্য এটি পুনরায় স্বাক্ষর করার প্রয়োজন হবে৷