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