Поделиться через


Protect-CmsMessage

Шифрует содержимое с помощью формата синтаксиса криптографического сообщения.

Синтаксис

ByContent (по умолчанию)

Protect-CmsMessage
    [-To] <CmsMessageRecipient[]>
    [-Content] <PSObject>
    [[-OutFile] <String>]
    [<CommonParameters>]

ByPath

Protect-CmsMessage
    [-To] <CmsMessageRecipient[]>
    [-Path] <String>
    [[-OutFile] <String>]
    [<CommonParameters>]

ByLiteralPath

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. Можно также использовать командлет для получения содержимого файла, такого как документ Microsoft Word, и сохранения его в переменной, которая используется в качестве значения параметра содержания .

Свойства параметра

Тип:PSObject
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

ByContent
Position:1
Обязательно:True
Значение из конвейера:True
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-LiteralPath

Указывает путь к содержимому, которое требуется зашифровать. В отличие от пути, значение LiteralPath используется в точности так, как оно введено. Никакие символы не интерпретируются как подстановочные знаки. Если путь содержит escape-символы, заключите его в одинарные кавычки. Одинарные кавычки указывают PowerShell на то, что не следует интерпретировать какие-либо символы как управляющие последовательности.

Свойства параметра

Тип:String
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

ByLiteralPath
Position:1
Обязательно:True
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-OutFile

Указывает путь и имя файла, в который требуется отправить зашифрованное содержимое.

Свойства параметра

Тип:String
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:2
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-Path

Указывает путь к содержимому, которое требуется зашифровать.

Свойства параметра

Тип:String
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

ByPath
Position:1
Обязательно:True
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-To

Указывает одного или нескольких получателей сообщений CMS, определенных в любом из следующих форматов:

  • Фактический сертификат (полученный от поставщика сертификатов).
  • Путь к файлу, содержаму сертификат.
  • Путь к каталогу, содержаму сертификат.
  • Отпечаток сертификата (используется для поиска в хранилище сертификатов).
  • Имя субъекта сертификата (используется для поиска в хранилище сертификатов).

Свойства параметра

Тип:

CmsMessageRecipient[]

Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:0
Обязательно:True
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

CommonParameters

Этот командлет поддерживает общие параметры: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction и -WarningVariable. Дополнительные сведения см. в разделе about_CommonParameters.