Protect-CmsMessage

Krypterar innehåll med hjälp av formatet kryptografisk meddelandesyntax.

Syntax

Protect-CmsMessage
       [-To] <CmsMessageRecipient[]>
       [-Content] <PSObject>
       [[-OutFile] <String>]
       [<CommonParameters>]
Protect-CmsMessage
       [-To] <CmsMessageRecipient[]>
       [-Path] <String>
       [[-OutFile] <String>]
       [<CommonParameters>]
Protect-CmsMessage
       [-To] <CmsMessageRecipient[]>
       [-LiteralPath] <String>
       [[-OutFile] <String>]
       [<CommonParameters>]

Description

Cmdleten Protect-CmsMessage krypterar innehåll med hjälp av CMS-formatet (Cryptographic Message Syntax).

CMS-cmdletarna stöder kryptering och dekryptering av innehåll med IETF-formatet som dokumenteras av RFC5652.

CMS-krypteringsstandarden använder kryptering av offentliga nycklar, där nycklarna som används för att kryptera innehåll (den offentliga nyckeln) och nycklarna som används för att dekryptera innehåll (den privata nyckeln) är separata. Din offentliga nyckel kan delas brett och är inte känsliga data. Om innehåll krypteras med den här offentliga nyckeln kan endast din privata nyckel dekryptera det. Mer information finns i kryptografi med offentlig nyckel.

Innan du kan köra cmdleten Protect-CmsMessage måste du ha konfigurerat ett krypteringscertifikat. För att identifieras i PowerShell kräver krypteringscertifikat en unik utökad nyckelanvändning (EKU-) ID för att identifiera dem som datakrypteringscertifikat (till exempel ID:n för kodsignering och krypterad e-post). Ett exempel på ett certifikat som skulle fungera för dokumentkryptering finns i Exempel 1 i det här avsnittet.

Stöd för Linux och macOS har lagts till i PowerShell 7.1.

Exempel

Exempel 1: Skapa ett certifikat för kryptering av innehåll

Innan du kan köra cmdleten Protect-CmsMessage måste du skapa ett krypteringscertifikat. Med hjälp av följande text ändrar du namnet på raden Ämne till ditt namn, din e-postadress eller någon annan identifierare och sparar certifikatet i en fil (till exempel DocumentEncryption.inf, som du ser i det här exemplet).

# Create .INF file for certreq
{[Version]
Signature = "$Windows NT$"

[Strings]
szOID_ENHANCED_KEY_USAGE = "2.5.29.37"
szOID_DOCUMENT_ENCRYPTION = "1.3.6.1.4.1.311.80.1"

[NewRequest]
Subject = "cn=youralias@emailaddress.com"
MachineKeySet = false
KeyLength = 2048
KeySpec = AT_KEYEXCHANGE
HashAlgorithm = Sha1
Exportable = true
RequestType = Cert
KeyUsage = "CERT_KEY_ENCIPHERMENT_KEY_USAGE | CERT_DATA_ENCIPHERMENT_KEY_USAGE"
ValidityPeriod = "Years"
ValidityPeriodUnits = "1000"

[Extensions]
%szOID_ENHANCED_KEY_USAGE% = "{text}%szOID_DOCUMENT_ENCRYPTION%"
} | Out-File -FilePath DocumentEncryption.inf

# After you have created your certificate file, run the following command to add
# the certificate file to the certificate store. Now you are ready to encrypt and
# decrypt content with the next two examples.
certreq.exe -new DocumentEncryption.inf DocumentEncryption.cer

Exempel 2: Kryptera ett meddelande som skickas via e-post

$Protected = "Hello World" | Protect-CmsMessage -To "*youralias@emailaddress.com*"

I följande exempel krypterar du ett meddelande, "Hello World", genom att skicka det till cmdleten Protect-CmsMessage och sedan spara det krypterade meddelandet i en variabel. Parametern Till använder värdet för ämnesraden i certifikatet.

Exempel 3: Visa dokumentkrypteringscertifikat

PS C:\> cd Cert:\CurrentUser\My
PS Cert:\CurrentUser\My> Get-ChildItem -DocumentEncryptionCert

Om du vill visa dokumentkrypteringscertifikat i certifikatprovidern kan du lägga till DocumentEncryptionCert dynamisk parameter för Get-ChildItem, som endast är tillgänglig när certifikatprovidern läses in.

Parametrar

-Content

Anger en PSObject- som innehåller innehåll som du vill kryptera. Du kan till exempel kryptera innehållet i ett händelsemeddelande och sedan använda variabeln som innehåller meddelandet ($Event, i det här exemplet) som värdet för parametern Content: $event = Get-WinEvent -ProviderName "PowerShell" -MaxEvents 1. Du kan också använda cmdleten Get-Content för att hämta innehållet i en fil, till exempel ett Microsoft Word-dokument, och spara innehållet i en variabel som du använder som värde för parametern Content.

Typ:PSObject
Position:1
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:True
Godkänn jokertecken:False

-LiteralPath

Anger sökvägen till innehåll som du vill kryptera. Till skillnad från Pathanvänds värdet för LiteralPath precis som det skrivs. Inga tecken tolkas som jokertecken. Om sökvägen innehåller escape-tecken omger du den med enkla citattecken. Enkla citattecken gör att PowerShell inte tolkar några tecken som escape-sekvenser.

Typ:String
Position:1
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-OutFile

Anger sökvägen och filnamnet för en fil som du vill skicka det krypterade innehållet till.

Typ:String
Position:2
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-Path

Anger sökvägen till innehåll som du vill kryptera.

Typ:String
Position:1
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-To

Anger en eller flera CMS-meddelandemottagare som identifieras i något av följande format:

  • Ett faktiskt certifikat (som hämtats från certifikatprovidern).
  • Sökväg till filen som innehåller certifikatet.
  • Sökväg till en katalog som innehåller certifikatet.
  • Tumavtryck för certifikatet (används för att titta i certifikatarkivet).
  • Certifikatets ämnesnamn (används för att titta i certifikatarkivet).
Typ:CmsMessageRecipient[]
Position:0
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:False
Godkänn jokertecken:False