Sdílet prostřednictvím


Set-AuthenticodeSignature

Přidá podpis Authenticode do skriptu PowerShellu nebo jiného souboru.

Syntaxe

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

Description

Rutina Set-AuthenticodeSignature přidá podpis Authenticode do libovolného souboru, který podporuje balíček SIP (Subject Interface Package).

V souboru skriptu PowerShellu má podpis formu bloku textu, který označuje konec pokynů, které jsou spuštěny ve skriptu. Pokud je v souboru při spuštění této rutiny podpis, odebere se tento podpis.

Příklady

Příklad 1 – Podepsání skriptu pomocí certifikátu z místního úložiště certifikátů

Tyto příkazy načtou podpisový certifikát kódu od zprostředkovatele certifikátu PowerShellu a použijí ho k podepsání skriptu PowerShellu.

$cert=Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert
$signingParameters = @{
    FilePath      = 'PsTestInternet2.ps1'
    Certificate   = $cert
    HashAlgorithm = 'SHA256'
}
Set-AuthenticodeSignature @signingParameters

První příkaz použije rutinu Get-ChildItem a zprostředkovatele certifikátu PowerShellu k získání certifikátů v podadresáři Cert:\CurrentUser\My úložiště certifikátů. Jednotka Cert: je jednotka vystavená poskytovatelem certifikátu. Parametr CodeSigningCert, který podporuje pouze poskytovatel certifikátu, omezuje certifikáty načtené na certifikáty s certifikační autoritou. Příkaz uloží výsledek do proměnné $cert.

Druhý příkaz definuje proměnnou $signingParameters jako hashtable s parametry pro rutinu Set-AuthenticodeSignature, která podepíše PSTestInternet2.ps1 skript. Pomocí parametru FilePath určuje název skriptu, parametr Certificate k určení, že certifikát je uložen v proměnné $cert, a parametr HashAlgorithm nastavit algoritmus hash na SHA256.

Třetí příkaz podepíše skript tak, že vypíše parametry definované v $signingParameters.

Poznámka

Použití parametru CodeSigningCert s Get-ChildItem vrací pouze certifikáty, které mají autoritu pro podepisování kódu a obsahují privátní klíč. Pokud neexistuje žádný privátní klíč, certifikáty se nedají použít k podepisování.

Příklad 2 – Podepsání skriptu pomocí certifikátu ze souboru PFX

Tyto příkazy používají rutinu Get-PfxCertificate k načtení podpisového certifikátu kódu. Pak ho použijte k podepsání skriptu PowerShellu.

$cert = Get-PfxCertificate -FilePath C:\Test\Mysign.pfx
$signingParameters = @{
    FilePath      = 'ServerProps.ps1'
    Certificate   = $cert
    HashAlgorithm = 'SHA256'
}
Set-AuthenticodeSignature @signingParameters

První příkaz použije rutinu Get-PfxCertificate k načtení certifikátu C:\Test\MySign.pfx do proměnné $cert.

Druhý příkaz definuje proměnnou $signingParameters jako hashtable s parametry pro rutinu Set-AuthenticodeSignature, která podepíše ServerProps.ps1 skript. Pomocí parametru FilePath určuje název skriptu, parametr Certificate k určení, že certifikát je uložen v proměnné $cert, a parametr HashAlgorithm nastavit algoritmus hash na SHA256.

Třetí příkaz podepíše skript tak, že vypíše parametry definované v $signingParameters.

Pokud je soubor certifikátu chráněný heslem, PowerShell vás vyzve k zadání hesla.

Příklad 3 – Přidání podpisu, který obsahuje kořenovou autoritu

Tento příkaz přidá digitální podpis, který obsahuje kořenovou autoritu v řetězu důvěryhodnosti a je podepsaný serverem časového razítka třetí strany.

$signingParameters = @{
    FilePath      = 'C:\scripts\Remodel.ps1'
    Certificate   = $cert
    HashAlgorithm = 'SHA256'
    IncludeChain  = 'All'
    TimestampServer = 'http://timestamp.fabrikam.com/scripts/timstamper.dll'
}
Set-AuthenticodeSignature @signingParameters

Příkaz používá parametr FilePath k určení podepsaného skriptu a parametru Certificate k určení certifikátu uloženého v proměnné $cert. Používá parametr IncludeChain k zahrnutí všech podpisů do řetězce důvěryhodnosti, včetně kořenové autority. Používá také parametr TimeStampServer k přidání časového razítka k podpisu. Tím se zabrání selhání skriptu při vypršení platnosti certifikátu.

Druhý příkaz podepíše skript tak, že vypíše parametry definované v $signingParameters.

Parametry

-Certificate

Určuje certifikát, který se použije k podepsání skriptu nebo souboru. Zadejte proměnnou, která ukládá objekt představující certifikát nebo výraz, který certifikát získá.

Pokud chcete najít certifikát, použijte Get-PfxCertificate nebo použijte rutinu Get-ChildItem na jednotce Cert: certifikátu. Pokud certifikát není platný nebo nemá code-signing autoritu, příkaz selže.

Typ:X509Certificate2
Position:1
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-Confirm

Před spuštěním rutiny vás vyzve k potvrzení.

Typ:SwitchParameter
Aliasy:cf
Position:Named
Default value:False
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-Content

Tento parametr se zobrazí v seznamu syntaxe, protože je definován v základní třídě, ze které Set-AuthenticodeSignature je odvozen. Podpora tohoto parametru však není implementována v Set-AuthenticodeSignature.

Typ:Byte[]
Position:Named
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:True
Přijmout zástupné znaky:False

-FilePath

Určuje cestu k podepsanému souboru.

Typ:String[]
Position:1
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:True
Přijmout zástupné znaky:False

-Force

Umožňuje rutině připojit podpis k souboru jen pro čtení. I když používáte parametr Force, rutina nemůže přepsat omezení zabezpečení.

Typ:SwitchParameter
Position:Named
Default value:False
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-HashAlgorithm

Určuje algoritmus hash, který Systém Windows používá k výpočtu digitálního podpisu souboru.

Výchozí hodnota je SHA1. Soubory podepsané jiným algoritmem hash nemusí být rozpoznány v jiných systémech. Podporované algoritmy závisí na verzi operačního systému.

Seznam možných hodnot najdete v tématu HashAlgorithmName struktura.

Typ:String
Position:Named
Default value:Null
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-IncludeChain

Určuje, které certifikáty v řetězu důvěryhodnosti certifikátů jsou součástí digitálního podpisu. NotRoot je výchozí.

Platné hodnoty jsou:

  • Signer: Zahrnuje pouze certifikát podepisující osoby.
  • NotRoot: Zahrnuje všechny certifikáty v řetězu certifikátů s výjimkou kořenové autority.
  • All: Zahrnuje všechny certifikáty v řetězu certifikátů.
Typ:String
Position:Named
Default value:NotRoot
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-LiteralPath

Určuje cestu k podepsanému souboru. Na rozdíl od FilePathse hodnota parametru LiteralPath používá přesně tak, jak je zadaný. Žádné znaky nejsou interpretovány jako zástupné znaky. Pokud cesta obsahuje řídicí znaky, uzavřete ji do jednoduchých uvozovek. Jednoduché uvozovky říkají PowerShellu, aby nepřekládaly žádné znaky jako řídicí sekvence.

Typ:String[]
Aliasy:PSPath
Position:Named
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:True
Přijmout zástupné znaky:False

-SourcePathOrExtension

Tento parametr se zobrazí v seznamu syntaxe, protože je definován v základní třídě, ze které Set-AuthenticodeSignature je odvozen. Podpora tohoto parametru však není implementována v Set-AuthenticodeSignature.

Typ:String[]
Position:Named
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:True
Přijmout zástupné znaky:False

-TimestampServer

Použije zadaný server časového razítka k přidání časového razítka k podpisu. Jako řetězec zadejte adresu URL serveru s časovým razítkem. Adresa URL musí začínat http://.

Časové razítko představuje přesný čas, kdy byl certifikát přidán do souboru. Časové razítko zabraňuje selhání skriptu, pokud vyprší platnost certifikátu, protože uživatelé a programy můžou ověřit platnost certifikátu při podepisování.

Typ:String
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-WhatIf

Ukazuje, co se stane, když se rutina spustí. Cmdlet se nespustil.

Typ:SwitchParameter
Aliasy:wi
Position:Named
Default value:False
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

Vstupy

String

Do této rutiny můžete zamísit řetězec obsahující cestu k souboru.

Výstupy

Signature

Tato rutina vrátí objekt Signature představující hodnotu, kterou nastavil.