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
cmdlet 使用加密消息语法 (CMS) 格式加密内容。
CMS cmdlet 支持使用 IETF 格式加密和解密内容,如 RFC5652 所述。
CMS 加密标准采用公钥加密系统,其中用来加密内容的密匙(公匙)和用来解密内容的密匙(私匙)是分离的。 公匙可以广泛共享,它不是敏感数据。 如果用此公匙加密了任何内容,只有你的私匙可以解密它。 有关详细信息,请参阅 Public-key cryptography(公钥加密)。
必须先设置加密证书,然后才能运行 Protect-CmsMessage
cmdlet。
若要在 PowerShell 中识别,加密证书需要唯一的扩展密钥用法 (EKU) ID 来将其标识为数据加密证书(例如代码签名和加密邮件的 ID)。 有关适用于文档加密的证书的示例,请参阅本主题中的示例 1。
PowerShell 7.1 中添加了对 Linux 和 macOS 的支持。
示例
示例 1:创建证书以用于加密内容
在运行 Protect-CmsMessage
cmdlet 之前,必须创建加密证书。 使用以下文本,将“主题”行中的名称更改为名称、电子邮件或其他标识符,并将证书保存在文件中(如 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
cmdlet 来加密消息,然后将加密的消息保存在变量中。 To 参数使用证书中 Subject 行的值。
示例 3:查看文档加密证书
PS C:\> cd Cert:\CurrentUser\My
PS Cert:\CurrentUser\My> Get-ChildItem -DocumentEncryptionCert
若要查看证书提供程序中的文档加密证书,可以添加 Get-ChildItem 的动态参数 DocumentEncryptionCert,仅在加载证书提供程序时才可用。
参数
-Content
指定 PSObject,其中包含要加密的内容。 例如,可以加密事件消息的内容,然后使用包含消息的变量(在本示例中为 $Event
)作为 Content参数的值:$event = Get-WinEvent -ProviderName "PowerShell" -MaxEvents 1
。 还可以使用 Get-Content
cmdlet 获取文件(如 Microsoft Word 文档)的内容,并将内容保存在用作 Content 参数值的变量中。
类型: | PSObject |
Position: | 1 |
默认值: | None |
必需: | True |
接受管道输入: | True |
接受通配符: | False |
-LiteralPath
指定要加密的内容的路径。 与 Path 不同,LiteralPath 的值严格按照所键入的形式使用。 不会将任何字符解释为通配符。 如果路径包括转义符,请将其括在单引号中。 单引号告知 PowerShell 不要将任何字符解释为转义序列。
类型: | String |
Position: | 1 |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-OutFile
指定要将加密内容发送到的文件的路径和文件名。
类型: | String |
Position: | 2 |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Path
指定要加密的内容的路径。
类型: | String |
Position: | 1 |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-To
指定一个或多个 CMS 消息收件人,这些收件人使用以下任何格式进行标识:
- 实际证书(从证书提供程序检索到的)。
- 指向包含证书的文件的路径。
- 指向包含证书的目录的路径。
- 证书的指纹(用于在证书存储中查找)。
- 证书的使用者名称(用于在证书存储中查找)。
类型: | CmsMessageRecipient[] |
Position: | 0 |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |