penandatanganan diri skrip PowerShell

1

Saya membuat sertifikat yang ditandatangani sendiri dengan Powershell cmdlet

New-SelfSignedCertificate -DnsName test.OJ.com -CertStoreLocation cert:\LocalMachine\My

Setelah itu sertifikat dapat dilihat di certlm di bawah sertifikat \ pribadi

Sekarang saya ingin menggunakan sertifikat ini untuk menandatangani skrip PS. Saya mencoba dua metode 1. dengan konsol PS

$cert = @(Get-ChildItem cert:\CurrentUser\My -CodeSigning)[0] 

Set-AuthenticodeSignature .\scriptTosing.ps1 $cert

setelah eksekusi perintah pertama variabel $ cert kosong

2. Menggunakan SignTool.exe

signtool.exe  sign /debug /a ".\scriptTosing.ps1" 

Ini hasilnya:

The following certificates were considered:


After EKU filter, 0 certs were left.

After expiry filter, 0 certs were left.

After Private Key filter, 0 certs were left.

SignTool Error: No certificates were found that met all the given criteria.

Mohon saran

OJNSim
sumber

Jawaban:

1

Itu sulit untuk diketahui - tetapi pada akhirnya solusi yang sangat mudah

Dokumentasi Get-ChildItem -CodeSigning mengatakan:

-CodeSigningCert

Hanya dapatkan sertifikat dengan otoritas penandatanganan kode. Ini   parameter mendapat sertifikat yang memiliki "Penandatanganan Kode" di   Nilai properti EnhancedKeyUsageList.

Anda $cert variabel kosong, karena tidak mendapat pengembalian dari get-childitem perintah, karena Sertifikat Anda tidak tahu itu Sertifikat CodeSigning, karena EnhancedKeyUsage Properti tidak sama dengan "CodeSigning" (juga, Anda menyimpan Sertifikat masuk LocalMachine, tetapi ingin membacanya dari CurrentUser yang salah).

Jadi saat Anda membuat sertifikat dengan New-SelfSignedCertificate Anda harus memberi tahu sertifikat, bahwa itu haruslah Sertifikat Penandatanganan Kode.

Itu New-SelfSignedCertificate cmdlet memiliki parameter berikut:

-Jenis

Menentukan jenis sertifikat yang dibuat cmdlet ini. Itu   nilai yang dapat diterima untuk parameter ini adalah:

- CodeSigningCert   - Kustom   - DocumentEncryptionCert   - DocumentEncryptionCertLegacyCsp   - SSLServerAuthentication (default)

Jadi seluruh Script Anda harus terlihat seperti ini:

New-SelfSignedCertificate -DnsName test.OJ.com -CertStoreLocation cert:\LocalMachine\My -type CodeSigning
$cert = @(Get-ChildItem cert:\LocalMachine\My -CodeSigning)[0] 
Set-AuthenticodeSignature .\scriptTosing.ps1 $cert
SimonS
sumber