48 घंटों में अपनी पहली स्क्रिप्ट पर हस्ताक्षर कैसे करें

समस्या


जब किसी समस्या को हल करने की आवश्यकता होती है, तो मैं वास्तव में इसे हल करने के लिए एक अलग उपयोगिता लिखना नहीं चाहता, खासकर यदि आप एक नेटवर्कर हैं।
स्क्रिप्ट? निश्चित रूप से, हाँ, लेकिन एक विंडोज-आधारित लड़ाकू वाहन पर तीसरे पक्ष के दुभाषिया को रखना सभी ईसाईयों में नहीं है। तो क्यों नहीं Windows Powershell का उपयोग करें? मैं तुरंत ईमानदारी से स्वीकार करने के लिए तैयार हूं: उसके साथ व्यावहारिक रूप से कोई अनुभव नहीं था, लेकिन यह बहुत आकर्षक लग रहा था।
समस्या को हल करने वाली स्क्रिप्ट 15 मिनट में तैयार हो जाती थी, यदि आप एक "लेकिन" को ध्यान में नहीं रखते हैं। इसे अभी तक एक स्क्रिप्ट कहना मुश्किल था, क्योंकि यह स्क्रिप्ट के रूप में निष्पादन के लिए अनुपयुक्त निर्देशों का एक सेट था। पॉवरशेल के संदर्भ में अनुपयुक्त।

हर चीज के लिए एक उचित स्पष्टीकरण है - बेशक, स्क्रिप्ट के निष्पादन पर कुछ प्रतिबंध लगाए गए हैं, जो स्क्रिप्ट निष्पादन नीति द्वारा निर्धारित किए गए हैं । स्क्रिप्ट बनाने के बाद, मैं इसे अपनी मशीन पर वहीं निष्पादित नहीं कर सका। हालाँकि, उत्पादन नीति पर अस्थायी रूप से अप्रतिबंधित या, और अधिक सही ढंग से, RemoteSigned , निष्पादन नीति को बदलकर स्थानीय मशीन के लिए हल की गई समस्या को गंभीरता से उठाया जाता है।

हमेशा एक रास्ता है। यह तर्कसंगत है कि निष्पादन के लिए तैयार स्क्रिप्ट पर हस्ताक्षर करने की आवश्यकता है। हस्ताक्षर तंत्र के आयोजन की प्रक्रिया काफी लंबी और कांटेदार है, लेकिन इस पद के लिए अच्छी मिट्टी है।

घर और कार्यालय में दो दिनों की पीड़ा के बाद, मैं जनता के सामने पावरस्ले के लिए स्क्रिप्ट पर हस्ताक्षर करने के लिए एक संक्षिप्त मैनुअल प्रस्तुत करता हूं।

निर्णय


डिफ़ॉल्ट रूप से, किसी भी स्क्रिप्ट का निष्पादन निषिद्ध है। आरंभ करने के लिए, आपको विश्वसनीय प्रकाशक से केवल विश्वसनीय हस्ताक्षरकर्ताओं से केवल हस्ताक्षरित स्क्रिप्ट के निष्पादन की अनुमति चाहिए। एक पॉवर्सशेल व्यवस्थापक सत्र के भाग के रूप में:

> Set-ExecutionPolicy AllSigned

टैमबोराइन के साथ आगे के नृत्य रूट और व्यक्तिगत प्रमाणपत्र बनाने के लिए उपयोगिता से संबंधित हैं।
स्क्रिप्ट पर हस्ताक्षर करने के लिए "निर्देशों" के अनुसार सभी प्रमाण पत्र

> Get-Help About_Signing

% प्रोग्राम फ़ाइलें% \ Microsoft SDKs \ Windows \ v7.0A \ bin \ makecert में स्थित makecert.exe सुविधा का उपयोग करके बनाया गया

निम्नलिखित दो क्रियाएं एक नियमित कमांड लाइन सत्र के भाग के रूप में की जाती हैं:

> makecert -n "CN=PowerShell Local Certificate Root" -a sha1 -eku 1.3.6.1.5.5.7.3.3 -r -sv root.pvk root.cer -ss Root -sr localMachine

> makecert -pe -n "CN=PowerShell User" -ss MY -a sha1 -eku 1.3.6.1.5.5.7.3.3 -iv root.pvk -ic root.cer


पहली पंक्ति प्रमाणन मशीन के रूप में स्थानीय मशीन का उपयोग करके मूल प्रमाण पत्र बनाती है। प्रमाण पत्र प्राप्त करने का सबसे लोकप्रिय "निशुल्क" तरीका है।
दूसरी पंक्ति एक व्यक्तिगत पॉवरशेल उपयोगकर्ता प्रमाणपत्र बनाती है, जिसे स्क्रिप्ट्स के साथ एक मूल प्रमाण पत्र के साथ सत्यापित करते हुए हस्ताक्षरित किया जाएगा। यदि सब कुछ ठीक रहा, तो दोनों लाइनों को सफल परिणाम दिखाना चाहिए।

यदि X509 व्यक्तिगत प्रमाणपत्र पहले से मौजूद है, तो उपरोक्त जोड़तोड़ नहीं किए जा सकते हैं।

उसके बाद, बस मामले में, आप सत्यापित कर सकते हैं कि ओएस आपके द्वारा बनाए गए प्रमाण पत्र से अवगत है। PowerShell:

> Get-Childitem cert:\CurrentUser\my -codesigning

स्क्रिप्ट पर हस्ताक्षर करना पहले से ही संभव है, लेकिन, इस मामले में, ऐसी पॉवर्सशेल लाइन हर बार स्क्रिप्ट हस्ताक्षर पर जाएगी:

> Set-AuthenticodeSignature "FileName" @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]

ऐसी स्क्रिप्ट बनाना तर्कसंगत होगा जो अन्य लिपियों पर हस्ताक्षर करेगी। स्क्रिप्ट को PowerShell ISE को छोड़कर किसी भी टेक्स्ट एडिटर में बनाया जाना चाहिए। इस वातावरण के अंदर बनाई गई स्क्रिप्ट के लिए, अज्ञात त्रुटि के रूप में साइन इन करने में समस्याएं आएंगी। निर्णय यहाँ किया जाता है

स्क्रिप्ट खुद इस तरह दिखती है:
param([string] $file=$(throw "Please specify a filename."))
$cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
Set-AuthenticodeSignature $file $cert

उपरोक्त निर्देशों का उपयोग करते हुए, हम इस स्क्रिप्ट को इंटरैक्टिव पॉवरशेल मोड में स्वयं साइन करेंगे।
उसके बाद, किसी अन्य मशीन पर निष्पादन के लिए स्क्रिप्ट पर इस तरह हस्ताक्षर किए जा सकते हैं:

> .\Add-Signature.ps1 MyScript.ps1

ओह दुखद


प्रमाण पत्र बनाया गया था, जिस पर छोड़कर किसी भी मशीन पर:
  1. यदि रूट प्रमाणपत्र पर भरोसा नहीं किया जाता है, तो स्क्रिप्ट बिल्कुल भी विफल हो जाएगी।
  2. यदि स्क्रिप्ट पर हस्ताक्षर करने वाले प्रकाशक के व्यक्तिगत प्रमाण पत्र पर भरोसा नहीं किया जाता है, तो स्क्रिप्ट को केवल पुष्टि के साथ निष्पादित किया जाएगा।

विश्वसनीय प्रमाणपत्र में रूट और व्यक्तिगत प्रमाणपत्र जोड़ने के लिए, आपको प्रमाण पत्र स्नैप-इन के साथ एमएमसी व्यवस्थापक कंसोल का उपयोग करने की आवश्यकता है। विश्वसनीय रूट प्रमाणीकरण प्राधिकारी और विश्वसनीय प्रकाशक फ़ोल्डर में प्रमाणपत्र जोड़ें।

यह केवल सही समाधान होने का ढोंग नहीं करता है, लेकिन शोध के परिणाम बताते हैं कि अब तक यह कमोबेश सामान्य तरीका है। मैं उन लोगों से पूछता हूं जो स्थिति को स्पष्ट करने में मदद करना चाहते हैं और यदि संभव हो तो लिंक को रोकें।

Source: https://habr.com/ru/post/In137884/


All Articles