Protect-CmsMessage

Cifra el contenido mediante el formato de sintaxis de mensajes criptográficos.

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

El Protect-CmsMessage cmdlet cifra el contenido mediante el formato de sintaxis de mensajes criptográficos (CMS).

Los cmdlets de CMS admiten el cifrado y el descifrado del contenido mediante el formato IETF tal como se documenta en RFC5652.

El estándar de cifrado cmS usa criptografía de clave pública, donde las claves usadas para cifrar el contenido (la clave pública) y las claves usadas para descifrar contenido (la clave privada) son independientes. La clave pública se puede compartir y no se considera información confidencial. Si cualquier contenido está cifrado con esta clave pública, solo su clave privada puede descifrarlo. Para obtener más información, consulte Public-key cryptography (Criptografía mediante claves públicas).

Para poder ejecutar el Protect-CmsMessage cmdlet, debe tener configurado un certificado de cifrado. Para que se reconozca en PowerShell, los certificados de cifrado requieren un identificador de uso de clave extendida (EKU) único para identificarlos como certificados de cifrado de datos (como los identificadores para la firma de código y el correo cifrado). Para obtener un ejemplo de un certificado que funcionaría para el cifrado de documentos, vea el ejemplo 1 de este tema.

Se ha agregado compatibilidad con Linux y macOS en PowerShell 7.1.

Ejemplos

Ejemplo 1: Crear un certificado para cifrar contenido

Para poder ejecutar el Protect-CmsMessage cmdlet, debe crear un certificado de cifrado. Con el texto siguiente, cambie el nombre de la línea Asunto por su nombre, correo electrónico u otro identificador y guarde el certificado en un archivo (como DocumentEncryption.inf, como se muestra en este ejemplo).

# 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

Ejemplo 2: Cifrado de un mensaje enviado por correo electrónico

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

En el ejemplo siguiente, se cifra un mensaje, "Hola mundo", canalizandolo al cmdlet y, a Protect-CmsMessage continuación, guarda el mensaje cifrado en una variable. El parámetro To usa el valor de la línea Subject del certificado.

Ejemplo 3: Visualización de certificados de cifrado de documentos

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

Para ver los certificados de cifrado de documentos en el proveedor de certificados, puede agregar el parámetro dinámico DocumentEncryptionCert de Get-ChildItem, disponible solo cuando se carga el proveedor de certificados.

Parámetros

-Content

Especifica un PSObject que contiene contenido que desea cifrar. Por ejemplo, puede cifrar el contenido de un mensaje de evento y, a continuación, usar la variable que contiene el mensaje ($Event, en este ejemplo) como el valor del parámetro Content : $event = Get-WinEvent -ProviderName "PowerShell" -MaxEvents 1. También puede usar el Get-Content cmdlet para obtener el contenido de un archivo, como un documento de Microsoft Word, y guardar el contenido en una variable que use como valor del parámetro Content .

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

-LiteralPath

Especifica la ruta de acceso al contenido que desea cifrar. A diferencia de Path, el valor de LiteralPath se usa exactamente como se escribe. Ninguno de los caracteres se interpreta como caracteres comodín. Si la ruta de acceso contiene caracteres de escape, escríbalos entre comillas simples. Las comillas simples indican a PowerShell que no interprete ningún carácter como secuencias de escape.

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

-OutFile

Especifica la ruta de acceso y el nombre de archivo de un archivo al que desea enviar el contenido cifrado.

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

-Path

Especifica la ruta de acceso al contenido que desea cifrar.

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

-To

Especifica uno o varios destinatarios del mensaje CMS, identificados en cualquiera de los siguientes formatos:

  • Un certificado real (como se recuperó del proveedor de certificados).
  • Ruta de acceso al archivo que contiene el certificado.
  • Ruta de acceso a un directorio que contiene el certificado.
  • Huella digital del certificado (que se usa para buscar en el almacén de certificados).
  • Nombre del firmante del certificado (que se usa para buscar en el almacén de certificados).
Type:CmsMessageRecipient[]
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False