Udostępnij za pośrednictwem


Protect-CmsMessage

Szyfruje zawartość przy użyciu formatu składni komunikatów kryptograficznych.

Składnia

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

Opis

Polecenie cmdlet Protect-CmsMessage szyfruje zawartość przy użyciu formatu składni komunikatów kryptograficznych (CMS).

Polecenia cmdlet cmS obsługują szyfrowanie i odszyfrowywanie zawartości przy użyciu formatu IETF zgodnie z opisem RFC5652.

Standard szyfrowania CMS używa kryptografii klucza publicznego, gdzie klucze używane do szyfrowania zawartości (klucza publicznego) i kluczy używanych do odszyfrowywania zawartości (klucza prywatnego) są oddzielne. Klucz publiczny może być szeroko udostępniany i nie jest poufny. Jeśli jakakolwiek zawartość jest zaszyfrowana przy użyciu tego klucza publicznego, tylko twój klucz prywatny może go odszyfrować. Aby uzyskać więcej informacji, zobacz kryptografii klucza publicznego.

Przed uruchomieniem polecenia cmdlet Protect-CmsMessage należy skonfigurować certyfikat szyfrowania. Aby można było rozpoznać w programie PowerShell, certyfikaty szyfrowania wymagają unikatowego rozszerzonego użycia klucza (identyfikatora EKU) w celu zidentyfikowania ich jako certyfikatów szyfrowania danych (takich jak identyfikatory podpisywania kodu i szyfrowana poczta). Przykład certyfikatu, który będzie działać na potrzeby szyfrowania dokumentów, zobacz Przykład 1 w tym temacie.

Dodano obsługę systemów Linux i macOS w programie PowerShell 7.1.

Przykłady

Przykład 1. Tworzenie certyfikatu na potrzeby szyfrowania zawartości

Przed uruchomieniem polecenia cmdlet Protect-CmsMessage należy utworzyć certyfikat szyfrowania. Używając następującego tekstu, zmień nazwę w wierszu tematu na nazwę, adres e-mail lub inny identyfikator, a następnie zapisz certyfikat w pliku (na przykład DocumentEncryption.inf, jak pokazano w tym przykładzie).

# 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

Przykład 2. Szyfrowanie wiadomości wysłanej pocztą e-mail

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

W poniższym przykładzie zaszyfrujesz komunikat "Hello World", potokując go do polecenia cmdlet Protect-CmsMessage, a następnie zapiszesz zaszyfrowany komunikat w zmiennej. Parametr To używa wartości wiersza Podmiot w certyfikacie.

Przykład 3. Wyświetlanie certyfikatów szyfrowania dokumentów

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

Aby wyświetlić certyfikaty szyfrowania dokumentów u dostawcy certyfikatów, można dodać DocumentEncryptionCert parametr dynamiczny Get-ChildItem, dostępny tylko wtedy, gdy dostawca certyfikatów jest załadowany.

Parametry

-Content

Określa PSObject, która zawiera zawartość, którą chcesz zaszyfrować. Można na przykład zaszyfrować zawartość komunikatu zdarzenia, a następnie użyć zmiennej zawierającej komunikat ($Event, w tym przykładzie) jako wartości parametru Content: $event = Get-WinEvent -ProviderName "PowerShell" -MaxEvents 1. Możesz również użyć polecenia cmdlet Get-Content, aby uzyskać zawartość pliku, takiego jak dokument programu Microsoft Word, i zapisać zawartość w zmiennej, która jest używana jako wartość parametru Content.

Typ:PSObject
Position:1
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:True
Akceptowanie symboli wieloznacznych:False

-LiteralPath

Określa ścieżkę do zawartości, którą chcesz zaszyfrować. W przeciwieństwie do Pathwartość LiteralPath jest używana dokładnie tak, jak jest typowana. Znaki nie są interpretowane jako symbole wieloznaczne. Jeśli ścieżka zawiera znaki ucieczki, należy ująć ją w pojedynczy cudzysłów. Pojedyncze znaki cudzysłowu informują program PowerShell, aby nie interpretował żadnych znaków jako sekwencji ucieczki.

Typ:String
Position:1
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-OutFile

Określa ścieżkę i nazwę pliku, do którego chcesz wysłać zaszyfrowaną zawartość.

Typ:String
Position:2
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-Path

Określa ścieżkę do zawartości, którą chcesz zaszyfrować.

Typ:String
Position:1
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-To

Określa co najmniej jednego adresata komunikatu CMS zidentyfikowanego w dowolnym z następujących formatów:

  • Rzeczywisty certyfikat (pobrany z dostawcy certyfikatów).
  • Ścieżka do pliku zawierającego certyfikat.
  • Ścieżka do katalogu zawierającego certyfikat.
  • Odcisk palca certyfikatu (używany do wyszukiwania w magazynie certyfikatów).
  • Nazwa podmiotu certyfikatu (używana do wyszukiwania w magazynie certyfikatów).
Typ:CmsMessageRecipient[]
Position:0
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False