PowerShell 스크립트에 쉽게 서명하는 방법은 무엇입니까?


15

PowerShell에서 AllSigned 실행 정책을 사용하고 싶지만 스크립트 자체 서명에는 수백 메가 바이트의 다운로드 및 설치가 필요한 것으로 보이며 서명 프로세스는 번거로운 것 같습니다.

설명서에 설명 된 것보다 PowerShell 스크립트에 서명하는 간단한 방법이 있습니까?

답변:


7

서명을하려면 Set-AuthenticodeSignature cmdlet을 . 물론 이것은 인증서가 필요합니다. 코드 서명 인증서를 만들 수있는 인증 기관 (있는 경우)이있는 경우 그렇지 않으면 자체 서명 된 인증서를 작성하는 다양한 도구가 있습니다.

인증서 저장소에 인증서를 설치 한 후 ( 이를 수행하려면 Windows 탐색기에서 파일 .cer또는 .pfx파일을 연 후) 전달하십시오 Set-AuthenticodeSignature( cert:제공자 / 드라이브는 저장소의 인증서에 대한 액세스를 제공함).

사용하다

help about_signing

자세한 내용은 해당 도움말 항목 의 온라인 버전 (Windows SDK 도구를 사용하여 자체 서명 된 인증서 만들기 포함 [1] )을 참조하십시오.

[1] 이것이 당신이 말하는 큰 다운로드라고 가정합니다. 필요한 비트 만 설치하거나 다른 도구를 사용할 수 있습니다 (OpenSSL에는 인증서 생성이 포함됩니다). 이를 위해 SDK를 얻는 것은 일회성 활동입니다.


나는이 대답을 받아들이고 있으며 지름길이 없으며 서명은 문서에서 언급 한대로 수행해야한다고 가정합니다.
Ville Koskinen

1
초기의 설정과 학습이 어려운 몇 가지 "개발자"와 마찬가지로 실제 연습 (특히 정기적으로 수행하는 경우)은 그렇지 않습니다.
Richard

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는 상황에 맞는 메뉴 (Windows 7을 사용 하고 있습니다)에서 Sign 옵션을 제공했습니다 . 서명하려는 인증서가 다르게 저장된 경우 끝에 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.