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 |