Protect-CmsMessage
Criptografa o conteúdo usando o formato de sintaxe de mensagem criptográfica.
Sintaxe
ByContent (Predefinição)
Protect-CmsMessage
[-To] <CmsMessageRecipient[]>
[-Content] <PSObject>
[[-OutFile] <String>]
[<CommonParameters>]
ByPath
Protect-CmsMessage
[-To] <CmsMessageRecipient[]>
[-Path] <String>
[[-OutFile] <String>]
[<CommonParameters>]
ByLiteralPath
Protect-CmsMessage
[-To] <CmsMessageRecipient[]>
[-LiteralPath] <String>
[[-OutFile] <String>]
[<CommonParameters>]
Description
O cmdlet Protect-CmsMessage criptografa o conteúdo usando o formato CMS (Sintaxe de Mensagem Criptográfica).
Os cmdlets CMS suportam criptografia e descriptografia de conteúdo usando o formato IETF, conforme documentado pelo RFC5652.
O padrão de criptografia CMS usa criptografia de chave pública, onde as chaves usadas para criptografar conteúdo (a chave pública) e as chaves usadas para descriptografar conteúdo (a chave privada) são separadas. Sua chave pública pode ser compartilhada amplamente e não são dados confidenciais. Se algum conteúdo for encriptado com esta chave pública, apenas a sua chave privada pode desencriptar. Para obter mais informações, consulte Criptografia de chave pública.
Antes de executar o cmdlet Protect-CmsMessage, você deve ter um certificado de criptografia configurado.
Para serem reconhecidos no PowerShell, os certificados de criptografia exigem uma ID exclusiva de uso de chave estendida (EKU) para identificá-los como certificados de criptografia de dados (como as IDs para Assinatura de Código e Email Criptografado). Para obter um exemplo de um certificado que funcionaria para criptografia de documentos, consulte o Exemplo 1 neste tópico.
O suporte para Linux e macOS foi adicionado no PowerShell 7.1.
Exemplos
Exemplo 1: Criar um certificado para criptografar conteúdo
Antes de executar o cmdlet Protect-CmsMessage, você deve criar um certificado de criptografia. Usando o texto a seguir, altere o nome na linha de assunto para seu nome, e-mail ou outro identificador e salve o certificado em um arquivo (como DocumentEncryption.inf, conforme mostrado neste exemplo).
# 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
Exemplo 2: Criptografar uma mensagem enviada por e-mail
$Protected = "Hello World" | Protect-CmsMessage -To "*youralias@emailaddress.com*"
No exemplo a seguir, você criptografa uma mensagem, "Hello World", canalizando-a para o cmdlet Protect-CmsMessage e, em seguida, salva a mensagem criptografada em uma variável. O parâmetro To usa o valor da linha de assunto no certificado.
Exemplo 3: Exibir certificados de criptografia de documentos
PS C:\> cd Cert:\CurrentUser\My
PS Cert:\CurrentUser\My> Get-ChildItem -DocumentEncryptionCert
Para exibir certificados de criptografia de documento no provedor de certificado, você pode adicionar o DocumentEncryptionCert parâmetro dinâmico de Get-ChildItem, disponível somente quando o provedor de certificado é carregado.
Parâmetros
-Content
Especifica um PSObject que contém conteúdo que você deseja criptografar. Por exemplo, você pode criptografar o conteúdo de uma mensagem de evento e, em seguida, usar a variável que contém a mensagem ($Event, neste exemplo) como o valor do Content parâmetro: $event = Get-WinEvent -ProviderName "PowerShell" -MaxEvents 1. Você também pode usar o cmdlet Get-Content para obter o conteúdo de um arquivo, como um documento do Microsoft Word, e salvar o conteúdo em uma variável que você usa como o valor do parâmetro Content.
Propriedades dos parâmetros
| Tipo: | PSObject |
| Default value: | None |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
ByContent
| Position: | 1 |
| Obrigatório: | True |
| Valor do pipeline: | True |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
-LiteralPath
Especifica o caminho para o conteúdo que você deseja criptografar. Ao contrário Path, o valor de LiteralPath é usado exatamente como é digitado. Nenhum caractere é interpretado como carta curinga. Se o caminho incluir caracteres de escape, coloque-o entre aspas simples. Aspas simples indicam ao PowerShell para não interpretar quaisquer caracteres como sequências de escape.
Propriedades dos parâmetros
| Tipo: | String |
| Default value: | None |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
ByLiteralPath
| Position: | 1 |
| Obrigatório: | True |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
-OutFile
Especifica o caminho e o nome do arquivo para o qual você deseja enviar o conteúdo criptografado.
Propriedades dos parâmetros
| Tipo: | String |
| Default value: | None |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
(All)
| Position: | 2 |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
-Path
Especifica o caminho para o conteúdo que você deseja criptografar.
Propriedades dos parâmetros
| Tipo: | String |
| Default value: | None |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
ByPath
| Position: | 1 |
| Obrigatório: | True |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
-To
Especifica um ou mais destinatários de mensagens CMS, identificados em qualquer um dos seguintes formatos:
- Um certificado real (conforme recuperado do provedor de certificado).
- Caminho para o arquivo que contém o certificado.
- Caminho para um diretório que contém o certificado.
- Impressão digital do certificado (usada para procurar no armazenamento de certificados).
- Nome do assunto do certificado (usado para procurar no armazenamento de certificados).
Propriedades dos parâmetros
| Tipo: | |
| Default value: | None |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
(All)
| Position: | 0 |
| Obrigatório: | True |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
CommonParameters
Este cmdlet suporta os parâmetros comuns: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction e -WarningVariable. Para obter mais informações, consulte about_CommonParameters.