Set-AuthenticodeSignature
Dodaje podpis Authenticode do skryptu programu PowerShell lub innego pliku.
Składnia
Set-AuthenticodeSignature
[-Certificate] <X509Certificate2>
[-IncludeChain <String>]
[-TimestampServer <String>]
[-HashAlgorithm <String>]
[-Force]
[-FilePath] <String[]>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Set-AuthenticodeSignature
[-Certificate] <X509Certificate2>
[-IncludeChain <String>]
[-TimestampServer <String>]
[-HashAlgorithm <String>]
[-Force]
-LiteralPath <String[]>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Set-AuthenticodeSignature
[-Certificate] <X509Certificate2>
[-IncludeChain <String>]
[-TimestampServer <String>]
[-HashAlgorithm <String>]
[-Force]
-SourcePathOrExtension <String[]>
-Content <Byte[]>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Opis
To polecenie cmdlet jest dostępne tylko na platformie Windows.
Polecenie cmdlet Set-AuthenticodeSignature
dodaje podpis Authenticode do każdego pliku, który obsługuje Pakiet Interfejsu Podmiotu (SIP).
W pliku skryptu programu PowerShell podpis ma postać bloku tekstu, który wskazuje koniec instrukcji wykonywanych w skry skryfcie. Jeśli plik zawiera podpis po uruchomieniu tego polecenia cmdlet, ten podpis zostanie usunięty.
Przykłady
Przykład 1 — podpisywanie skryptu przy użyciu certyfikatu z lokalnego magazynu certyfikatów
Te polecenia pobierają certyfikat podpisywania kodu od dostawcy certyfikatów programu PowerShell i używają go do podpisywania skryptu programu PowerShell.
$cert = Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert
Set-AuthenticodeSignature -FilePath PsTestInternet2.ps1 -Certificate $cert
Pierwsze polecenie używa polecenia cmdlet Get-ChildItem
i dostawcy certyfikatów programu PowerShell do pobrania certyfikatów w podkatalogu Cert:\CurrentUser\My
magazynu certyfikatów. Dysk Cert:
jest dyskiem udostępnianym przez dostawcę certyfikatów. Parametr CodeSigningCert, który jest obsługiwany tylko przez dostawcę certyfikatów, ogranicza certyfikaty pobrane do tych z urzędem podpisywania kodu. Polecenie przechowuje wynik w zmiennej $cert
.
Drugie polecenie używa polecenia cmdlet Set-AuthenticodeSignature
do podpisania skryptu PSTestInternet2.ps1
. Używa parametru FilePath, aby określić nazwę skryptu i parametr certyfikatu, aby określić, że certyfikat jest przechowywany w zmiennej $cert
.
Uwaga
Parametr CodeSigningCert z Get-ChildItem
zwraca tylko certyfikaty, które mają uprawnienia do podpisywania kodu i zawierają klucz prywatny. Jeśli nie ma klucza prywatnego, certyfikaty nie mogą być używane do podpisywania.
Przykład 2 — podpisywanie skryptu przy użyciu certyfikatu z pliku PFX
Te polecenia używają polecenia cmdlet Get-PfxCertificate
do załadowania certyfikatu podpisywania kodu. Następnie użyj go do podpisania skryptu programu PowerShell.
$cert = Get-PfxCertificate -FilePath C:\Test\Mysign.pfx
Set-AuthenticodeSignature -FilePath ServerProps.ps1 -Certificate $cert
Pierwsze polecenie używa polecenia cmdlet Get-PfxCertificate
do załadowania certyfikatu C:\Test\MySign.pfx
do zmiennej $cert
.
Drugie polecenie używa Set-AuthenticodeSignature
do podpisania skryptu. Parametr FilePathSet-AuthenticodeSignature
określa ścieżkę do podpisanego pliku skryptu, a parametr Cert przekazuje zmienną $cert
zawierającą certyfikat do Set-AuthenticodeSignature
.
Jeśli plik certyfikatu jest chroniony hasłem, program PowerShell wyświetli monit o podanie hasła.
Przykład 3 — dodawanie podpisu zawierającego urząd główny
To polecenie dodaje podpis cyfrowy, który zawiera urząd główny w łańcuchu zaufania i jest podpisany przez serwer sygnatury czasowej innej firmy.
$signingParameters = @{
FilePath = 'C:\scripts\Remodel.ps1'
Certificate = $cert
HashAlgorithm = 'SHA256'
IncludeChain = 'All'
TimestampServer = 'http://timestamp.fabrikam.com/scripts/timstamper.dll'
}
Set-AuthenticodeSignature @signingParameters
Polecenie używa parametru FilePath w celu określenia podpisanego skryptu oraz parametru Certificate w celu określenia certyfikatu zapisanego w zmiennej $cert
. Używa on parametru IncludeChain, aby uwzględnić wszystkie podpisy w łańcuchu zaufania, w tym urząd główny. Używa również parametru TimeStampServer, aby dodać znacznik czasu do podpisu.
Zapobiega to awarii skryptu po wygaśnięciu certyfikatu.
Parametry
-Certificate
Określa certyfikat, który będzie używany do podpisywania skryptu lub pliku. Wprowadź zmienną, która przechowuje obiekt reprezentujący certyfikat lub wyrażenie, które pobiera certyfikat.
Aby znaleźć certyfikat, użyj Get-PfxCertificate
lub użyj polecenia Get-ChildItem
na dysku certyfikatu Cert:
. Jeśli certyfikat jest nieprawidłowy lub nie ma code-signing
urzędu, polecenie kończy się niepowodzeniem.
Typ: | X509Certificate2 |
Position: | 1 |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-Confirm
Prosi o potwierdzenie przed uruchomieniem polecenia cmdlet.
Typ: | SwitchParameter |
Aliasy: | cf |
Position: | Named |
Domyślna wartość: | False |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-Content
Ten parametr pojawia się na liście składni, ponieważ jest on zdefiniowany w klasie bazowej, na podstawie Set-AuthenticodeSignature
. Jednak obsługa tego parametru nie jest zaimplementowana w Set-AuthenticodeSignature
.
Typ: | Byte[] |
Position: | Named |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | True |
Akceptowanie symboli wieloznacznych: | False |
-FilePath
Określa ścieżkę do podpisanego pliku.
Typ: | String[] |
Position: | 1 |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | True |
Akceptowanie symboli wieloznacznych: | False |
-Force
Umożliwia poleceniem cmdlet dołączanie podpisu do pliku tylko do odczytu. Nawet, gdy używa się parametru Force, polecenie cmdlet nie jest w stanie zastąpić ograniczeń zabezpieczeń.
Typ: | SwitchParameter |
Position: | Named |
Domyślna wartość: | False |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-HashAlgorithm
Określa algorytm wyznaczania skrótu używany przez system Windows do obliczania podpisu cyfrowego dla pliku.
W przypadku programu PowerShell 7.3 wartość domyślna to SHA256, czyli domyślny algorytm wyznaczania wartości skrótu systemu Windows. W przypadku wcześniejszych wersji wartość domyślna to SHA1. Pliki podpisane za pomocą innego algorytmu tworzenia skrótów mogą nie być rozpoznawane w innych systemach. Obsługiwane algorytmy zależą od wersji systemu operacyjnego.
Aby uzyskać listę możliwych wartości, zobacz strukturę HashAlgorithmName.
Typ: | String |
Position: | Named |
Domyślna wartość: | SHA256 |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-IncludeChain
Określa, które certyfikaty w łańcuchu zaufania certyfikatów są zawarte w podpisie cyfrowym. NotRoot jest wartością domyślną.
Prawidłowe wartości to:
-
Signer
: zawiera tylko certyfikat użytkownika podpisjącego. -
NotRoot
: obejmuje wszystkie certyfikaty w łańcuchu certyfikatów, z wyjątkiem urzędu głównego. -
All
: obejmuje wszystkie certyfikaty w łańcuchu certyfikatów.
Typ: | String |
Position: | Named |
Domyślna wartość: | NotRoot |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-LiteralPath
Określa ścieżkę do podpisanego pliku. W przeciwieństwie do FilePathwartość parametru LiteralPath jest używana dokładnie tak, jak jest typowana. Znaki nie są interpretowane jako symbole wieloznaczne. Jeśli ścieżka zawiera znaki ucieczki, należy ująć ją w pojedynczy cudzysłów. Pojedyncze znaki cudzysłowu informują program PowerShell, aby nie interpretował żadnych znaków jako sekwencji ucieczki.
Typ: | String[] |
Aliasy: | PSPath, LP |
Position: | Named |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | True |
Akceptowanie symboli wieloznacznych: | False |
-SourcePathOrExtension
Ten parametr pojawia się na liście składni, ponieważ jest on zdefiniowany w klasie bazowej, na podstawie Set-AuthenticodeSignature
. Jednak obsługa tego parametru nie jest zaimplementowana w Set-AuthenticodeSignature
.
Typ: | String[] |
Position: | Named |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | True |
Akceptowanie symboli wieloznacznych: | False |
-TimestampServer
Używa określonego serwera sygnatury czasowej, aby dodać sygnaturę czasową do podpisu. Wpisz adres URL serwera sygnatur czasowych jako ciąg. URL musi zaczynać się od http://
.
Sygnatura czasowa reprezentuje dokładny czas dodania certyfikatu do pliku. Sygnatura czasowa uniemożliwia skryptowi niepowodzenie, jeśli certyfikat wygaśnie, ponieważ użytkownicy i programy mogą sprawdzić, czy certyfikat był prawidłowy w momencie podpisywania.
Uwaga
Program PowerShell 7.3 dodał obsługę adresów URL https://
z tym parametrem. Jednak podstawowy interfejs API nie obsługuje protokołu HTTPS. Jeśli używasz protokołu HTTPS, polecenie zwraca błąd, ale plik jest podpisany bez sygnatury czasowej. Aby uzyskać więcej informacji, zobacz Problem #25130.
Typ: | String |
Position: | Named |
Domyślna wartość: | None |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-WhatIf
Pokazuje, co się stanie, jeśli polecenie cmdlet zostanie uruchomione. Cmdlet nie został uruchomiony.
Typ: | SwitchParameter |
Aliasy: | wi |
Position: | Named |
Domyślna wartość: | False |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
Dane wejściowe
Możesz przesłać strumieniowo ciąg znaków zawierający ścieżkę pliku do tego cmdletu.
Dane wyjściowe
To polecenie cmdlet zwraca obiekt Signature reprezentujący ustawioną wartość.
Uwagi
To polecenie cmdlet jest dostępne tylko na platformach Windows.