Condividi tramite


Protect-CmsMessage

Crittografa il contenuto usando il formato Sintassi del messaggio di crittografia.

Sintassi

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>]

Descrizione

Il Protect-CmsMessage cmdlet crittografa il contenuto usando il formato CMS (Cryptographic Message Syntax).

I cmdlet CMS supportano la crittografia e la decrittografia del contenuto usando il formato IETF, come documentato da RFC5652.

Lo standard di crittografia CMS usa la crittografia a chiave pubblica, in cui le chiavi usate per crittografare il contenuto (la chiave pubblica) e le chiavi usate per decrittografare il contenuto (la chiave privata) sono separate. La chiave pubblica può essere condivisa liberamente e non contiene dati sensibili. Eventuale contenuto crittografato con la chiave pubblica potrà essere decrittografato solo con la chiave privata. Per altre informazioni, vedere: Crittografia a chiave pubblica.

Prima di poter eseguire il Protect-CmsMessage cmdlet, è necessario configurare un certificato di crittografia. Per essere riconosciuti in PowerShell, i certificati di crittografia richiedono un ID EKU (Extended Key Usage) univoco per identificarli come certificati di crittografia dei dati, ad esempio gli ID per la firma del codice e la posta crittografata. Per un esempio di certificato che funzionerebbe per la crittografia dei documenti, vedere l'esempio 1 in questo argomento.

Il supporto per Linux e macOS è stato aggiunto in PowerShell 7.1.

Esempio

Esempio 1: Creare un certificato per crittografare il contenuto

Prima di poter eseguire il Protect-CmsMessage cmdlet, è necessario creare un certificato di crittografia. Usando il testo seguente, modificare il nome nella riga Oggetto impostando il nome, il messaggio di posta elettronica o un altro identificatore e salvare il certificato in un file, ad esempio DocumentEncryption.inf, come illustrato in questo esempio.

# 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

Esempio 2: Crittografare un messaggio inviato tramite posta elettronica

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

Nell'esempio seguente si crittografa un messaggio "Hello World", inviandolo al Protect-CmsMessage cmdlet e quindi salvare il messaggio crittografato in una variabile. Il parametro To usa il valore della riga Oggetto nel certificato.

Esempio 3: Visualizzare i certificati di crittografia dei documenti

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

Per visualizzare i certificati di crittografia dei documenti nel provider di certificati, è possibile aggiungere il parametro dinamico DocumentEncryptionCert di Get-ChildItem, disponibile solo quando viene caricato il provider di certificati.

Parametri

-Content

Specifica un PSObject che contiene contenuto da crittografare. Ad esempio, è possibile crittografare il contenuto di un messaggio di evento e quindi usare la variabile contenente il messaggio ($Eventin questo esempio) come valore del parametro Content : $event = Get-WinEvent -ProviderName "PowerShell" -MaxEvents 1. È anche possibile utilizzare il Get-Content cmdlet per ottenere il contenuto di un file, ad esempio un documento di Microsoft Word, e salvare il contenuto in una variabile utilizzata come valore del parametro Content .

Tipo:PSObject
Posizione:1
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:True
Accettare caratteri jolly:False

-LiteralPath

Specifica il percorso del contenuto da crittografare. A differenza di Path, il valore di LiteralPath viene usato esattamente come viene tipizzato. Nessun carattere viene interpretato come carattere jolly. Se il percorso include caratteri di escape, racchiuderlo tra virgolette singole. Le virgolette singole indicano a PowerShell di non interpretare alcun carattere come sequenze di escape.

Tipo:String
Posizione:1
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-OutFile

Specifica il percorso e il nome file di un file a cui si desidera inviare il contenuto crittografato.

Tipo:String
Posizione:2
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-Path

Specifica il percorso del contenuto da crittografare.

Tipo:String
Posizione:1
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-To

Specifica uno o più destinatari del messaggio CMS, identificati in uno dei formati seguenti:

  • Un certificato effettivo (come recuperato dal provider di certificati).
  • Percorso del file contenente il certificato.
  • Percorso di una directory contenente il certificato.
  • Identificazione personale del certificato (usata per cercare nell'archivio certificati).
  • Nome soggetto del certificato (usato per cercare nell'archivio certificati).
Tipo:CmsMessageRecipient[]
Posizione:0
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:False
Accettare caratteri jolly:False