Freigeben über


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 Cmdlet Protect-CmsMessage 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 RFC5652dokumentiert.

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 weit freigegeben werden und sind keine vertraulichen Daten. Wenn inhalte mit diesem öffentlichen Schlüssel verschlüsselt sind, kann nur Ihr privater Schlüssel sie entschlüsseln. Weitere Informationen finden Sie unter Kryptografie mit öffentlichem Schlüssel.

Bevor Sie das Cmdlet Protect-CmsMessage 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 erweiterte Schlüsselverwendung (EKU-), um sie als Datenverschlüsselungszertifikate (z. B. die IDs für die Codesignierung 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 Cmdlet Protect-CmsMessage 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. B. DocumentEncryption.inf, 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 "Hello World", indem Sie sie an das Cmdlet Protect-CmsMessage 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 DocumentEncryptionCert dynamischen Parameter von Get-ChildItem-hinzufügen, der nur verfügbar ist, wenn der Zertifikatanbieter geladen wird.

Parameter

-Content

Gibt eine PSObject- an, die Inhalte enthält, die Sie verschlüsseln möchten. Sie können z. B. den Inhalt einer Ereignisnachricht verschlüsseln und dann die Variable mit der Nachricht ($Event, in diesem Beispiel) als Wert des parameters Content verwenden: $event = Get-WinEvent -ProviderName "PowerShell" -MaxEvents 1. Sie können auch das Cmdlet Get-Content 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 parameters Content verwenden.

Typ:PSObject
Position:1
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:True
Platzhalterzeichen akzeptieren:False

-LiteralPath

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

Typ:String
Position:1
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-OutFile

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

Typ:String
Position:2
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-Path

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

Typ:String
Position:1
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren: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).
Typ:CmsMessageRecipient[]
Position:0
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False