Compartilhar via


Protect-CmsMessage

Criptografa o conteúdo usando o formato sintaxe de mensagem criptográfica.

Sintaxe

ByContent (Padrã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 do CMS dão suporte à criptografia e à descriptografia de conteúdo usando o formato IETF, conforme documentado por 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 amplamente compartilhada e não é dados confidenciais. Se qualquer conteúdo for criptografado com essa chave pública, somente sua chave privada poderá descriptografá-la. 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 um uso exclusivo de chave estendida (ID dede 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 documento, consulte o Exemplo 1 neste tópico.

O suporte para Linux e macOS foi adicionado ao 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 Assunto para seu nome, email 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 email

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

No exemplo a seguir, você criptografa uma mensagem, "Olá, Mundo", canalizando-a para o cmdlet Protect-CmsMessage e, em seguida, salve a mensagem criptografada em uma variável. O parâmetro To usa o valor da linha Subject no certificado.

Exemplo 3: exibir certificados de criptografia de documento

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

Para exibir certificados de criptografia de documento no provedor de certificados, você pode adicionar o DocumentEncryptionCert parâmetro dinâmico de Get-ChildItem, disponível somente quando o provedor de certificados é carregado.

Parâmetros

-Content

Especifica um PSObject que contém o 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 parâmetro Content: $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 do parâmetro

Tipo:PSObject
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

ByContent
Cargo:1
Obrigatório:True
Valor do pipeline:True
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes:False

-LiteralPath

Especifica o caminho para o conteúdo que você deseja criptografar. Diferente de Path, o valor de LiteralPath é usado exatamente como foi digitado. Nenhum caractere é interpretado como caractere curinga. Se o caminho incluir caracteres de escape, coloque-o entre aspas simples. Aspas simples indicam ao PowerShell que não deve interpretar nenhum caractere como uma sequência de escape.

Propriedades do parâmetro

Tipo:String
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

ByLiteralPath
Cargo:1
Obrigatório:True
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes:False

-OutFile

Especifica o caminho e o nome do arquivo de um arquivo para o qual você deseja enviar o conteúdo criptografado.

Propriedades do parâmetro

Tipo:String
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

(All)
Cargo:2
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes:False

-Path

Especifica o caminho para o conteúdo que você deseja criptografar.

Propriedades do parâmetro

Tipo:String
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

ByPath
Cargo:1
Obrigatório:True
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes: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 certificados).
  • 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 da entidade do certificado (usado para pesquisar no repositório de certificados).

Propriedades do parâmetro

Tipo:

CmsMessageRecipient[]

Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

(All)
Cargo:0
Obrigatório:True
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes: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.