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 ($Event
in 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 |