Protect-CmsMessage
Шифрует содержимое с помощью формата синтаксиса криптографического сообщения.
Синтаксис
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>]
Описание
Командлет Protect-CmsMessage
шифрует содержимое с помощью формата синтаксиса криптографических сообщений (CMS).
Командлеты CMS поддерживают шифрование и расшифровку содержимого с помощью формата IETF, как описано RFC5652.
Стандарт шифрования CMS использует криптографию открытого ключа, где ключи, используемые для шифрования содержимого (открытый ключ), и ключи, используемые для расшифровки содержимого (закрытый ключ), разделены. Открытый ключ можно свободно распространять, так как он не относится к конфиденциальным сведениям. Если какое-либо содержимое зашифровано с помощью данного открытого ключа, расшифровать его позволяет только имеющийся у вас закрытый ключ. Дополнительные сведения см. на странице о шифровании с открытым ключом.
Перед запуском командлета Protect-CmsMessage
необходимо настроить сертификат шифрования.
Для распознавания сертификатов шифрования в PowerShell требуется уникальный идентификатор расширенного использования ключей (EKU), чтобы определить их как сертификаты шифрования данных (например, идентификаторы для подписи кода и зашифрованной почты). Пример сертификата, который будет работать для шифрования документов, см. в примере 1 в этом разделе.
Добавлена поддержка Linux и macOS в PowerShell 7.1.
Примеры
Пример 1. Создание сертификата для шифрования содержимого
Перед запуском командлета Protect-CmsMessage
необходимо создать сертификат шифрования. Используя следующий текст, измените имя в строке темы на имя, электронную почту или другой идентификатор и сохраните сертификат в файле (например, как DocumentEncryption.inf
показано в этом примере).
# 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
Пример 2. Шифрование сообщения, отправленного по электронной почте
$Protected = "Hello World" | Protect-CmsMessage -To "*youralias@emailaddress.com*"
В следующем примере вы зашифруете сообщение "Hello World", перенавязав его командлету Protect-CmsMessage
, а затем сохраните зашифрованное сообщение в переменной. Параметр To использует значение строки subject в сертификате.
Пример 3. Просмотр сертификатов шифрования документов
PS C:\> cd Cert:\CurrentUser\My
PS Cert:\CurrentUser\My> Get-ChildItem -DocumentEncryptionCert
Чтобы просмотреть сертификаты шифрования документов в поставщике сертификатов, можно добавить динамический параметр DocumentEncryptionCert Get-ChildItem, доступный только при загрузке поставщика сертификатов.
Параметры
-Content
Указывает PSObject , содержащий содержимое, которое требуется зашифровать. Например, можно зашифровать содержимое сообщения события, а затем использовать переменную, содержащую сообщение ($Event
в этом примере), в качестве значения параметра Content: $event = Get-WinEvent -ProviderName "PowerShell" -MaxEvents 1
Можно также использовать Get-Content
командлет для получения содержимого файла, например документа Microsoft Word, и сохранения содержимого в переменной, используемой в качестве значения параметра Content .
Тип: | PSObject |
Position: | 1 |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | True |
Принять подстановочные знаки: | False |
-LiteralPath
Указывает путь к содержимому, которое требуется зашифровать. В отличие от Path, значение LiteralPath используется точно так же, как он типизированный. Никакие символы не интерпретируются как знаки подстановки. Если путь содержит escape-символы, заключите его в одинарные кавычки. Одинарные кавычки говорят PowerShell не интерпретировать какие-либо символы как escape-последовательности.
Тип: | String |
Position: | 1 |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-OutFile
Указывает путь и имя файла, в который требуется отправить зашифрованное содержимое.
Тип: | String |
Position: | 2 |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Path
Указывает путь к содержимому, которое требуется зашифровать.
Тип: | String |
Position: | 1 |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-To
Указывает одного или нескольких получателей сообщений CMS, определенных в любом из следующих форматов:
- Фактический сертификат (полученный от поставщика сертификатов).
- Путь к файлу, содержаму сертификат.
- Путь к каталогу, содержаму сертификат.
- Отпечаток сертификата (используется для поиска в хранилище сертификатов).
- Имя субъекта сертификата (используется для поиска в хранилище сертификатов).
Тип: | CmsMessageRecipient[] |
Position: | 0 |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
Связанные ссылки
PowerShell