आसानी से PowerShell स्क्रिप्ट पर हस्ताक्षर कैसे करें?


15

मैं PowerShell के साथ AllSigned निष्पादन नीति का उपयोग करना पसंद करूंगा, लेकिन मेरी स्क्रिप्ट्स को स्व-हस्ताक्षरित करने के लिए कई सैकड़ों मेगाबाइट्स डाउनलोड और स्थापना की आवश्यकता होती है और हस्ताक्षर करने की प्रक्रिया एक परेशानी लगती है।

क्या डॉक्यूमेंट में वर्णित पावरस्ले स्क्रिप्ट को साइन करने का एक सरल तरीका है?

जवाबों:


7

हस्ताक्षर करने के लिए आप Set-AuthenticodeSignaturecmdlet का उपयोग कर सकते हैं । यह, निश्चित रूप से, एक प्रमाण पत्र की आवश्यकता है। यदि आपके पास एक सर्टिफिकेट अथॉरिटी (अप्रभावित) है जो एक कोड साइनिंग सर्टिफिकेट बनाने में सक्षम होगा। अन्यथा स्व-हस्ताक्षरित प्रमाण पत्र बनाने के लिए विभिन्न उपकरण हैं।

आप अपने प्रमाणपत्र स्टोर में प्रमाण पत्र स्थापित करते हैं ( ऐसा करने के लिए विंडोज एक्सप्लोरर में .cerया .pfxफ़ाइल खोलें ), और फिर इसे पास करें Set-AuthenticodeSignature( cert:प्रदाता / ड्राइव आपके स्टोर में प्रमाण पत्र तक पहुंच देता है)।

उपयोग

help about_signing

या विवरण के लिए उस मदद विषय के ऑनलाइन संस्करण (विंडोज एसडीके टूल्स [1] का उपयोग करके स्व-हस्ताक्षरित प्रमाण पत्र बनाने सहित )।

[१] मुझे लगता है कि यह वह बड़ी डाउनलोड है जिसका आप जिक्र कर रहे हैं: आप बस उन बिट्स को स्थापित कर सकते हैं जिनकी आपको आवश्यकता है, या अन्य टूल का उपयोग करें (ओपनएसएसएल में सर्टिफिकेशन जेनरेशन शामिल है)। एसडीके प्राप्त करना, इस उद्देश्य के लिए, एक-बंद गतिविधि है।


मैं इस उत्तर को स्वीकार कर रहा हूं और यह मानता हूं कि कोई शॉर्टकट नहीं है और केवल डॉक्स में बताए अनुसार हस्ताक्षर करने की आवश्यकता है।
विले कोस्किनेन

1
बहुत कुछ "डेवलपर-वाई" चीजों की तरह प्रारंभिक सेट अप और सीखना कठिन है, लेकिन वास्तविक अभ्यास (खासकर अगर नियमित रूप से किया जाता है) नहीं है।
रिचर्ड

7

मैं इस PowerShell स्क्रिप्ट का उपयोग करता हूं:

## sign-script.ps1
## Sign a powershell script with a Thawte certificate and 
## timestamp the signature
##
## usage: ./sign-script.ps1 c:\foo.ps1 

param([string] $file=$(throw “Please specify a script filepath.”)) 

$certFriendlyName = "Thawte Code Signing"
$cert = gci cert:\CurrentUser\My -codesigning | where -Filter 
  {$_.FriendlyName -eq $certFriendlyName}

# https://www.thawte.com/ssl-digital-certificates/technical-  
#   support/code/msauth.html#timestampau
# We thank VeriSign for allowing public use of their timestamping server.
# Add the following to the signcode command line: 
# -t http://timestamp.verisign.com/scripts/timstamp.dll 
$timeStampURL = "http://timestamp.verisign.com/scripts/timstamp.dll"

if($cert) {
    Set-AuthenticodeSignature -filepath $file -cert $cert -IncludeChain All -   
      TimeStampServer $timeStampURL
}
else {
    throw "Did not find certificate with friendly name of `"$certFriendlyName`""
}

5

एक बार मेरे पास प्रमाणपत्र होने के बाद, मैं अपने उपयोगकर्ता खाते पर आयातित का उपयोग करना चाहता था। इस regkey ने मुझे संदर्भ मेनू में एक विकल्प, हस्ताक्षर , (मैं विंडोज 7 का उपयोग कर रहा हूं) दिया। यदि आप जिस प्रमाणपत्र के साथ हस्ताक्षर करना चाहते हैं वह अलग तरीके से संग्रहीत किया गया है, बस अंत में PowerShell कमांड को बदलें ।

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Classes\Microsoft.PowerShellScript.1]

[HKEY_CURRENT_USER\Software\Classes\Microsoft.PowerShellScript.1\Shell]

[HKEY_CURRENT_USER\Software\Classes\Microsoft.PowerShellScript.1\Shell\Sign]

[HKEY_CURRENT_USER\Software\Classes\Microsoft.PowerShellScript.1\Shell\Sign\Command]
@="C:\\\Windows\\\System32\\\WindowsPowerShell\\\v1.0\\\powershell.exe -command Set-AuthenticodeSignature '%1' @(Get-ChildItem cert:\\\CurrentUser\\\My -codesigning)[0]"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.