Protect-CmsMessage
Verschlüsselt Inhalte mithilfe des Formats kryptografische 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 im IETF-Format, wie von RFC5652 dokumentiert.
Der CMS-Verschlüsselungsstandard verwendet Kryptografie mit öffentlichen Schlüsseln, bei der die zum Verschlüsseln von Inhalten verwendeten Schlüssel (der öffentliche Schlüssel) und die Zum Entschlüsseln von Inhalten verwendeten Schlüssel (der private 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 ein Verschlüsselungszertifikat eingerichtet haben.
Um in PowerShell erkannt zu werden, benötigen Verschlüsselungszertifikate eine eindeutige EKU-ID (Extended Key Usage), um sie als Datenverschlüsselungszertifikate zu identifizieren (z. B. die IDs für Die Codesignatur und verschlüsselte E-Mail). Ein Beispiel für ein Zertifikat, das für die Dokumentverschlüsselung geeignet wäre, finden Sie unter Beispiel 1 in diesem Thema.
Hinweis
Dieses Cmdlet ist nur unter Windows verfügbar.
Beispiele
Beispiel 1: Create 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 Zeile Betreff 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 mit dem Namen "Hallo Welt", indem Sie sie an das Protect-CmsMessage
Cmdlet weiterleiten und dann die verschlüsselte Nachricht in einer Variablen speichern. Der To-Parameter 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 Inhalte enthält, die Sie verschlüsseln möchten. Sie können beispielsweise den Inhalt einer Ereignisnachricht verschlüsseln und dann die Variable mit der Nachricht ($Event
in diesem Beispiel) als Wert des Inhaltsparameters verwenden: $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 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 wurde. Es werden keine Zeichen als Platzhalter interpretiert. Wenn der Pfad Escapezeichen enthält, müssen Sie ihn in einfache Anführungszeichen einschließen. Einzelne 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 zum Suchen im Zertifikatspeicher verwendet).
- Antragstellername des Zertifikats (wird zum Suchen im Zertifikatspeicher verwendet).
Type: | CmsMessageRecipient[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Hinweise
Dieses Cmdlet ist nur auf Windows-Plattformen verfügbar.