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 Protect-CmsMessage cmdlet 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 Kryptografia klucza publicznego.

Przed uruchomieniem Protect-CmsMessage polecenia cmdlet należy skonfigurować certyfikat szyfrowania. Aby można je było rozpoznać w programie PowerShell, certyfikaty szyfrowania wymagają unikatowego identyfikatora rozszerzonego użycia klucza (EKU), aby zidentyfikować je jako certyfikaty szyfrowania danych (takie 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 Protect-CmsMessage polecenia cmdlet 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 (takim jak 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 Protect-CmsMessage polecenia cmdlet, 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ć parametr dynamiczny DocumentEncryptionCert get-ChildItem dostępny tylko po załadowaniu dostawcy certyfikatów.

Parametry

-Content

Określa obiekt PSObject zawierający zawartość, którą chcesz zaszyfrować. Można na przykład zaszyfrować zawartość komunikatu zdarzenia, a następnie użyć zmiennej zawierającej komunikat ($Eventw tym przykładzie) jako wartości parametru Zawartość : $event = Get-WinEvent -ProviderName "PowerShell" -MaxEvents 1. Możesz również użyć Get-Content polecenia cmdlet , 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 ścieżki wartość LiterałuPath 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