Protect-CmsMessage (Microsoft.PowerShell.Security)
Protect-CmsMessage
- Модуль:
- Microsoft.PowerShell.Security
Шифрует содержимое с использованием формата синтаксиса криптографического сообщения.
Синтаксис
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 использует значение строки «Тема» сертификата.
Пример 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. параметр.
- Тип :
PSОбъект
- Позиция:
1
- Значение по умолчанию:
None
- Необходимый:
True
- Примите ввод конвейера:
True
- Принимайте подстановочные знаки:
False
-LiteralPath
Указывает путь к содержимому, которое вы хотите зашифровать. В отличие от Path, значение LiteralPath используется точно так, как оно введено. Никакие символы не интерпретируются как подстановочные знаки. Если путь содержит escape-символы, заключите его в одинарные кавычки. Одинарные кавычки сообщают PowerShell не интерпретировать никакие символы как escape-последовательности.
- Тип :
String
- Позиция:
1
- Значение по умолчанию:
None
- Необходимый:
True
- Примите ввод конвейера:
False
- Принимайте подстановочные знаки:
False
-OutFile
Указывает путь и имя файла, в который вы хотите отправить зашифрованное содержимое.
- Тип :
String
- Позиция:
2
- Значение по умолчанию:
None
- Необходимый:
False
- Примите ввод конвейера:
False
- Принимайте подстановочные знаки:
False
-Path
Указывает путь к содержимому, которое вы хотите зашифровать.
- Тип :
String
- Позиция:
1
- Значение по умолчанию:
None
- Необходимый:
True
- Примите ввод конвейера:
False
- Принимайте подстановочные знаки:
False
-To
Указывает одного или нескольких получателей сообщения CMS, указанных в любом из следующих форматов:
- Фактический сертификат (полученный от поставщика сертификатов).
- Путь к файлу, содержащему сертификат.
- Путь к каталогу, содержащему сертификат.
- Отпечаток сертификата (используется для просмотра в хранилище сертификатов).
- Имя субъекта сертификата (используется для поиска в хранилище сертификатов).
- Тип :
CmsMessageRecipient[]
- Позиция:
0
- Значение по умолчанию:
None
- Необходимый:
True
- Примите ввод конвейера:
False
- Принимайте подстановочные знаки:
False