Delen via


Protect-CmsMessage

Hiermee versleutelt u inhoud met behulp van de indeling Cryptografische berichtsyntaxis.

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

De Protect-CmsMessage cmdlet versleutelt inhoud met behulp van de CMS-indeling (Cryptographic Message Syntax).

De CMS-cmdlets ondersteunen versleuteling en ontsleuteling van inhoud met behulp van de IETF-indeling, zoals beschreven in RFC5652.

De CMS-versleutelingsstandaard maakt gebruik van openbare-sleutelcryptografie, waarbij de sleutels die worden gebruikt voor het versleutelen van inhoud (de openbare sleutel) en de sleutels die worden gebruikt voor het ontsleutelen van inhoud (de persoonlijke sleutel) gescheiden zijn. Uw openbare sleutel kan op grote schaal worden gedeeld en is geen gevoelige gegevens. Als inhoud is versleuteld met deze openbare sleutel, kan alleen uw persoonlijke sleutel deze ontsleutelen. Zie Cryptografie met openbare sleutels voor meer informatie.

Voordat u de Protect-CmsMessage cmdlet kunt uitvoeren, moet u een versleutelingscertificaat hebben ingesteld. Om te worden herkend in PowerShell, hebben versleutelingscertificaten een unieke EKU-id (Extended Key Usage) nodig om ze te identificeren als gegevensversleutelingscertificaten (zoals de id's voor code-ondertekening en versleutelde e-mail). Zie Voorbeeld 1 in dit onderwerp voor een voorbeeld van een certificaat dat geschikt is voor documentversleuteling.

Ondersteuning voor Linux en macOS is toegevoegd in PowerShell 7.1.

Voorbeelden

Voorbeeld 1: een certificaat Creatie voor het versleutelen van inhoud

Voordat u de Protect-CmsMessage cmdlet kunt uitvoeren, moet u een versleutelingscertificaat maken. Gebruik de volgende tekst om de naam in de onderwerpregel te wijzigen in uw naam, e-mailadres of andere id en sla het certificaat op in een bestand (zoals DocumentEncryption.inf, zoals in dit voorbeeld).

# 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

Voorbeeld 2: Een bericht versleutelen dat per e-mail wordt verzonden

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

In het volgende voorbeeld versleutelt u een bericht, 'Hallo wereld', door het door te sturen naar de Protect-CmsMessage cmdlet en vervolgens het versleutelde bericht op te slaan in een variabele. De parameter Aan gebruikt de waarde van de onderwerpregel in het certificaat.

Voorbeeld 3: Documentversleutelingscertificaten weergeven

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

Als u documentversleutelingscertificaten in de certificaatprovider wilt weergeven, kunt u de dynamische parameter DocumentEncryptionCert van Get-ChildItem toevoegen, die alleen beschikbaar is wanneer de certificaatprovider is geladen.

Parameters

-Content

Hiermee geeft u een PSObject dat inhoud bevat die u wilt versleutelen. U kunt bijvoorbeeld de inhoud van een gebeurtenisbericht versleutelen en vervolgens de variabele met het bericht ($Eventin dit voorbeeld) gebruiken als de waarde van de parameter Inhoud : $event = Get-WinEvent -ProviderName "PowerShell" -MaxEvents 1. U kunt de Get-Content cmdlet ook gebruiken om de inhoud van een bestand op te halen, zoals een Microsoft Word-document, en de inhoud op te slaan in een variabele die u gebruikt als de waarde van de parameter Inhoud.

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

-LiteralPath

Hiermee geeft u het pad naar inhoud die u wilt versleutelen. In tegenstelling tot Path wordt de waarde van LiteralPath precies gebruikt zoals deze is getypt. Geen tekens worden geïnterpreteerd als jokertekens. Als het pad escape-tekens bevat, plaatst u het tussen enkele aanhalingstekens. Enkele aanhalingstekens geven PowerShell aan dat geen tekens als escape-reeksen worden geïnterpreteerd.

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

-OutFile

Hiermee geeft u het pad en de bestandsnaam op van een bestand waarnaar u de versleutelde inhoud wilt verzenden.

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

-Path

Hiermee geeft u het pad naar inhoud die u wilt versleutelen.

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

-To

Hiermee geeft u een of meer cms-berichtontvangers op, geïdentificeerd in een van de volgende indelingen:

  • Een echt certificaat (zoals opgehaald van de certificaatprovider).
  • Pad naar het bestand dat het certificaat bevat.
  • Pad naar een map met het certificaat.
  • Vingerafdruk van het certificaat (gebruikt om te zoeken in het certificaatarchief).
  • Onderwerpnaam van het certificaat (gebruikt om te zoeken in het certificaatarchief).
Type:CmsMessageRecipient[]
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False