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 klucze używane do odszyfrowywania zawartości (klucza prywatnego) są oddzielne. Klucz publiczny można szeroko udostępniać i nie jest poufnymi danymi. 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: Twórca certyfikat do szyfrowania zawartości
Przed uruchomieniem Protect-CmsMessage
polecenia cmdlet należy utworzyć certyfikat szyfrowania. Korzystając z następującego tekstu, zmień nazwę w wierszu Podmiot 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 szyfrujesz komunikat "Hello world", potokując go do Protect-CmsMessage
polecenia cmdlet, a następnie zapisując zaszyfrowany komunikat w zmiennej. Parametr To używa wartości wiersza Temat 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 DocumentEncryptionCertget-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 Content : $event = Get-WinEvent -ProviderName "PowerShell" -MaxEvents 1
. Możesz również użyć Get-Content
polecenia cmdlet , aby uzyskać zawartość pliku, takiego jak dokument microsoft Word, i zapisać zawartość w zmiennej, która jest używana jako wartość parametru Content.
Type: | PSObject |
Position: | 1 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | 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 znaki pojedynczego cudzysłowu. Znaki pojedynczego cudzysłowu informują program PowerShell, aby nie interpretował żadnych znaków jako sekwencji ucieczki.
Type: | String |
Position: | 1 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-OutFile
Określa ścieżkę i nazwę pliku, do którego chcesz wysłać zaszyfrowaną zawartość.
Type: | String |
Position: | 2 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Path
Określa ścieżkę do zawartości, którą chcesz zaszyfrować.
Type: | String |
Position: | 1 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | 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).
Type: | CmsMessageRecipient[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |