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 de nycklar som används för att dekryptera innehåll (den privata nyckeln) är separata. Din offentliga nyckel kan delas i stor utsträckning och är inte känsliga data. Om något innehåll krypteras med den här offentliga nyckeln kan endast din privata nyckel dekryptera den. Mer information finns i Kryptografi med offentlig nyckel.

Innan du kan köra cmdleten Protect-CmsMessage måste du ha ett krypteringscertifikat konfigurerat. För att identifieras i PowerShell kräver krypteringscertifikat ett unikt EKU-ID (Extended Key Usage) 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å ämnesraden till ditt namn, e-postmeddelande 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 raden Ämne 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 den dynamiska parametern DocumentEncryptionCert 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 ($Eventi det här exemplet) som värdet för parametern Innehåll : $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 Innehåll.

Type:PSObject
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-LiteralPath

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

Type:String
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-OutFile

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

Type:String
Position:2
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Path

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

Type:String
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters: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).
Type:CmsMessageRecipient[]
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False