Làm cách nào để ký một tập lệnh PowerShell dễ dàng?


15

Tôi muốn sử dụng chính sách thực thi AllSign với PowerShell, nhưng việc tự ký các tập lệnh của tôi dường như cần vài trăm megabyte tải xuống và cài đặt và quá trình ký có vẻ rắc rối.

Có cách nào đơn giản hơn để ký một tập lệnh PowerShell so với mô tả trong tài liệu không?

Câu trả lời:


7

Để làm được việc ký bạn có thể sử dụng Set-AuthenticodeSignaturecmdlet. Điều này, tất nhiên, đòi hỏi một chứng chỉ. Nếu bạn có Tổ chức phát hành Chứng chỉ (không chắc) sẽ có thể tạo chứng chỉ ký mã. Nếu không, có nhiều công cụ khác nhau để tạo chứng chỉ tự ký.

Bạn cài đặt chứng chỉ trong cửa hàng chứng chỉ của bạn (mở .cerhoặc .pfxtệp trong Windows Explorer để thực hiện việc này), sau đó chuyển nó tới Set-AuthenticodeSignature( cert:nhà cung cấp / ổ đĩa cấp quyền truy cập vào chứng chỉ trong cửa hàng của bạn).

Sử dụng

help about_signing

hoặc phiên bản trực tuyến của chủ đề trợ giúp đó để biết chi tiết (bao gồm tạo chứng chỉ tự ký bằng các công cụ SDK của Windows [1] ).

[1] Tôi cho rằng đây là phần tải xuống lớn mà bạn đang đề cập: bạn chỉ có thể cài đặt các bit bạn cần hoặc sử dụng các công cụ khác (OpenSSL bao gồm tạo chứng chỉ). Lấy SDK là, cho mục đích này, là một hoạt động một lần.


Tôi chấp nhận câu trả lời này và cho rằng không có lối tắt và việc ký chỉ cần được thực hiện như được đề cập trong các tài liệu.
Ville Koskinen

1
Giống như một vài điều "nhà phát triển-y" mà việc thiết lập và học tập ban đầu rất khó khăn, nhưng thực tế thực tế (đặc biệt là nếu được thực hiện thường xuyên) thì không.
Richard

7

Tôi sử dụng tập lệnh PowerShell này:

## 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

Khi tôi đã có chứng chỉ, tôi muốn sử dụng nhập trên tài khoản người dùng của mình. Regkey này đã cho tôi một tùy chọn, Sign , trong menu ngữ cảnh (Tôi đang sử dụng Windows 7). Nếu chứng chỉ bạn muốn đăng nhập được lưu trữ khác nhau, chỉ cần thay đổi lệnh PowerShell ở cuối.

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]"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.