วิธีลงชื่อสคริปต์ PowerShell อย่างง่ายดาย


15

ฉันต้องการใช้นโยบายการดำเนินการ AllSigned กับ PowerShell แต่สคริปต์ที่ลงนามด้วยตนเองของฉันดูเหมือนจะต้องการการดาวน์โหลดและติดตั้งหลายร้อยเมกะไบต์และกระบวนการลงนามดูเหมือนว่าจะยุ่งยาก

มีวิธีที่ง่ายกว่าในการเซ็นสคริปต์ PowerShell มากกว่าที่อธิบายไว้ในเอกสารประกอบหรือไม่?

คำตอบ:


7

ในการลงนามคุณสามารถใช้Set-AuthenticodeSignaturecmdlet แน่นอนนี้ต้องใช้ใบรับรอง หากคุณมีผู้ให้บริการออกใบรับรอง (ไม่น่าจะ) ซึ่งจะสามารถสร้างใบรับรองการลงนามรหัส มิฉะนั้นจะมีเครื่องมือต่าง ๆ ในการสร้างใบรับรองแบบลงนามด้วยตนเอง

คุณติดตั้งใบรับรองในที่เก็บใบรับรองของคุณ (เปิด.cerหรือ.pfxไฟล์ใน Windows Explorer เพื่อทำสิ่งนี้) แล้วส่งต่อไปที่Set-AuthenticodeSignature( cert:ผู้ให้บริการ / ไดรฟ์ให้การเข้าถึงใบรับรองในร้านค้าของคุณ)

ใช้

help about_signing

หรือหัวข้อวิธีใช้รุ่นออนไลน์นั้นเพื่อดูรายละเอียด (รวมถึงการสร้างใบรับรองที่ลงชื่อด้วยตนเองโดยใช้เครื่องมือ Windows SDK [1] )

[1]ฉันถือว่านี่เป็นการดาวน์โหลดครั้งใหญ่ที่คุณอ้างถึง: คุณสามารถติดตั้งบิตที่คุณต้องการหรือใช้ประโยชน์จากเครื่องมืออื่น ๆ (OpenSSL รวมถึงการสร้างใบรับรอง) การได้รับ SDK คือการทำกิจกรรมแบบครั้งเดียว


ฉันยอมรับคำตอบนี้และสมมติว่าไม่มีทางลัดและการลงชื่อเพียงแค่ต้องทำตามที่กล่าวไว้ในเอกสาร
Ville Koskinen

1
เช่นเดียวกับบางสิ่ง "นักพัฒนา -y" ที่การตั้งค่าเริ่มต้นและการเรียนรู้ค่อนข้างยาก แต่การปฏิบัติจริง (โดยเฉพาะถ้าทำอย่างสม่ำเสมอ) ไม่ใช่
ริชาร์ด

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 นี้ให้ตัวเลือกSignในเมนูบริบท (ฉันใช้ Windows 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]"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.