Protect-CmsMessage

Verschlüsselt Inhalte mithilfe des Formats der kryptografischen Nachrichtensyntax.

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>]

Beschreibung

Das Protect-CmsMessage Cmdlet verschlüsselt Inhalte mithilfe des CMS-Formats (Cryptographic Message Syntax).

Die CMS-Cmdlets unterstützen die Verschlüsselung und Entschlüsselung von Inhalten mithilfe des IETF-Formats, wie von RFC5652 dokumentiert.

Der CMS-Verschlüsselungsstandard verwendet Kryptografie für öffentliche Schlüssel, bei denen die Schlüssel zum Verschlüsseln von Inhalten (dem öffentlichen Schlüssel) und die Schlüssel zum Entschlüsseln von Inhalten (dem privaten Schlüssel) getrennt sind. Ihr öffentlicher Schlüssel kann umfassend freigegeben werden, da seine Daten nicht vertraulich sind. Wenn Inhalte mit diesem öffentlichen Schlüssel verschlüsselt sind, können sie nur mit Ihrem privaten Schlüssel entschlüsselt werden. Weitere Informationen finden Sie unter Public-Key-Verschlüsselungsverfahren.

Bevor Sie das Protect-CmsMessage Cmdlet ausführen können, müssen Sie über ein Verschlüsselungszertifikat verfügen. Um in PowerShell erkannt zu werden, benötigen Verschlüsselungszertifikate eine eindeutige EKU-ID (Extended Key Usage), um sie als Datenverschlüsselungszertifikate (z. B. die IDs für die Codesignatur und verschlüsselte E-Mail) zu identifizieren. Ein Beispiel für ein Zertifikat, das für die Dokumentverschlüsselung geeignet wäre, finden Sie in Beispiel 1 in diesem Thema.

Unterstützung für Linux und macOS wurde in PowerShell 7.1 hinzugefügt.

Beispiele

Beispiel 1: Erstellen eines Zertifikats zum Verschlüsseln von Inhalten

Bevor Sie das Protect-CmsMessage Cmdlet ausführen können, müssen Sie ein Verschlüsselungszertifikat erstellen. Ändern Sie mit dem folgenden Text den Namen in der Betreffzeile in Ihren Namen, Ihre E-Mail oder einen anderen Bezeichner, und speichern Sie das Zertifikat in einer Datei (z DocumentEncryption.inf. B. wie in diesem Beispiel gezeigt).

# 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

Beispiel 2: Verschlüsseln einer per E-Mail gesendeten Nachricht

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

Im folgenden Beispiel verschlüsseln Sie eine Nachricht ,Hallo Welt", indem Sie sie an das Protect-CmsMessage Cmdlet weiterleiten und dann die verschlüsselte Nachricht in einer Variablen speichern. Der Parameter "To " verwendet den Wert der Betreffzeile im Zertifikat.

Beispiel 3: Anzeigen von Dokumentverschlüsselungszertifikaten

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

Um Dokumentverschlüsselungszertifikate im Zertifikatanbieter anzuzeigen, können Sie den dynamischen Parameter DocumentEncryptionCert von Get-ChildItem hinzufügen, der nur verfügbar ist, wenn der Zertifikatanbieter geladen wird.

Parameter

-Content

Gibt ein PSObject an, das Inhalt enthält, den Sie verschlüsseln möchten. Sie können z. B. den Inhalt einer Ereignisnachricht verschlüsseln und dann die Variable verwenden, die die Nachricht ($Eventin diesem Beispiel) als Wert des Inhaltsparameters enthält: $event = Get-WinEvent -ProviderName "PowerShell" -MaxEvents 1 Sie können das Get-Content Cmdlet auch verwenden, um den Inhalt einer Datei abzurufen, z. B. ein Microsoft Word-Dokument, und den Inhalt in einer Variablen zu speichern, die Sie als Wert des Inhaltsparameters verwenden.

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

-LiteralPath

Gibt den Pfad zu Inhalten an, die Sie verschlüsseln möchten. Im Gegensatz zu Path wird der Wert von LiteralPath genau so verwendet, wie er eingegeben wird. Es werden keine Zeichen als Platzhalter interpretiert. Wenn der Pfad Escapezeichen enthält, müssen Sie ihn in einfache Anführungszeichen einschließen. Einfache Anführungszeichen weisen PowerShell an, keine Zeichen als Escapesequenzen zu interpretieren.

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

-OutFile

Gibt den Pfad und Dateinamen einer Datei an, an die Sie den verschlüsselten Inhalt senden möchten.

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

-Path

Gibt den Pfad zu Inhalten an, die Sie verschlüsseln möchten.

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

-To

Gibt einen oder mehrere CMS-Nachrichtenempfänger an, die in einem der folgenden Formate identifiziert werden:

  • Ein tatsächliches Zertifikat (wie vom Zertifikatanbieter abgerufen).
  • Pfad zur Datei, die das Zertifikat enthält.
  • Pfad zu einem Verzeichnis, das das Zertifikat enthält.
  • Fingerabdruck des Zertifikats (wird verwendet, um im Zertifikatspeicher zu suchen).
  • Antragstellername des Zertifikats (wird verwendet, um im Zertifikatspeicher zu suchen).
Type:CmsMessageRecipient[]
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False