Protect-CmsMessage

Chiffre le contenu à l’aide du format syntaxe des messages de chiffrement.

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

L’applet Protect-CmsMessage de commande chiffre le contenu au format CMS (Cryptographic Message Syntax).

Les applets de commande CMS prennent en charge le chiffrement et le déchiffrement du contenu à l’aide du format IETF tel qu’documenté par RFC5652.

La norme de chiffrement CMS utilise le chiffrement à clé publique, où les clés utilisées pour chiffrer le contenu (la clé publique) et les clés utilisées pour déchiffrer le contenu (la clé privée) sont distinctes. Votre clé publique peut être partagée à grande échelle et ne constitue pas des données sensibles. Si du contenu est chiffré avec cette clé publique, seule votre clé privée peut le déchiffrer. Pour plus d’informations, consultez Cryptographie asymétrique.

Avant de pouvoir exécuter l’applet Protect-CmsMessage de commande, vous devez configurer un certificat de chiffrement. Pour être reconnus dans PowerShell, les certificats de chiffrement nécessitent un ID d’utilisation de clé étendue (EKU) unique pour les identifier en tant que certificats de chiffrement de données (tels que les ID pour la signature de code et le courrier chiffré). Pour obtenir un exemple de certificat qui fonctionne pour le chiffrement de document, consultez l’exemple 1 dans cette rubrique.

La prise en charge de Linux et macOS a été ajoutée dans PowerShell 7.1.

Exemples

Exemple 1 : Créer un certificat pour le chiffrement du contenu

Avant de pouvoir exécuter l’applet Protect-CmsMessage de commande, vous devez créer un certificat de chiffrement. À l’aide du texte suivant, remplacez le nom dans la ligne Objet par votre nom, e-mail ou autre identificateur, puis enregistrez le certificat dans un fichier (par DocumentEncryption.infexemple, comme illustré dans cet exemple).

# 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

Exemple 2 : Chiffrer un message envoyé par e-mail

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

Dans l’exemple suivant, vous chiffrez un message, « Hello World », en le pipant vers l’applet Protect-CmsMessage de commande, puis enregistrez le message chiffré dans une variable. Le paramètre To utilise la valeur de la ligne Objet dans le certificat.

Exemple 3 : Afficher les certificats de chiffrement de documents

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

Pour afficher les certificats de chiffrement de documents dans le fournisseur de certificats, vous pouvez ajouter le paramètre dynamique DocumentEncryptionCert de Get-ChildItem, disponible uniquement lorsque le fournisseur de certificats est chargé.

Paramètres

-Content

Spécifie un PSObject qui contient du contenu que vous souhaitez chiffrer. Par exemple, vous pouvez chiffrer le contenu d’un message d’événement, puis utiliser la variable contenant le message ($Eventdans cet exemple) comme valeur du paramètre Content : $event = Get-WinEvent -ProviderName "PowerShell" -MaxEvents 1. Vous pouvez également utiliser l’applet Get-Content de commande pour obtenir le contenu d’un fichier, tel qu’un document Microsoft Word, et enregistrer le contenu dans une variable que vous utilisez comme valeur du paramètre Contenu .

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

-LiteralPath

Spécifie le chemin d’accès au contenu que vous souhaitez chiffrer. Contrairement à Path, la valeur de LiteralPath est utilisée exactement comme elle est typée. Aucun caractère n’est interprété en tant que caractère générique. Si le chemin d’accès inclut des caractères d’échappement, mettez-le entre des guillemets simples. Les guillemets simples indiquent à PowerShell de ne pas interpréter de caractères comme séquences d’échappement.

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

-OutFile

Spécifie le chemin d’accès et le nom de fichier d’un fichier auquel vous souhaitez envoyer le contenu chiffré.

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

-Path

Spécifie le chemin d’accès au contenu que vous souhaitez chiffrer.

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

-To

Spécifie un ou plusieurs destinataires de message CMS, identifiés dans l’un des formats suivants :

  • Certificat réel (tel que récupéré à partir du fournisseur de certificats).
  • Chemin d’accès au fichier contenant le certificat.
  • Chemin d’accès à un répertoire contenant le certificat.
  • Empreinte numérique du certificat (utilisée pour rechercher dans le magasin de certificats).
  • Nom du sujet du certificat (utilisé pour rechercher dans le magasin de certificats).
Type:CmsMessageRecipient[]
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False