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 ($Event
i 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 |