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 ($Event
in 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.
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 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.
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 |