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 コマンドレットは、RFC5652に記載されている IETF 形式を使用したコンテンツの暗号化と暗号化解除 をサポートします。
CMS 暗号化標準では公開キー暗号化が使用されます。ここで、コンテンツの暗号化に使用されるキー (公開キー) と、コンテンツの暗号化解除に使用されるキー (秘密キー) は分離されています。 公開キーは広く共有でき、機密性の高いデータではありません。 いずれかのコンテンツがこの公開キーで暗号化された場合、秘密キーのみが暗号化を解除できます。 公開キー暗号化の詳細については、「公開鍵暗号」を参照してください。
コマンドレットを実行する前に Protect-CmsMessage
、暗号化証明書を設定しておく必要があります。
PowerShell で認識するには、暗号化証明書には、データ暗号化証明書 (コード署名および暗号化されたメールの ID など) として識別するために、一意の拡張キー使用法 (EKU) ID が必要です。 ドキュメントの暗号化に使用できる証明書の例については、このトピックの「例 1」を参照してください。
Linux と macOS のサポートが PowerShell 7.1 で追加されました。
例
例 1: コンテンツを暗号化するための証明書をCreateする
コマンドレットを実行する前に 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
証明書プロバイダーでドキュメント暗号化証明書を表示するには、Get-ChildItem の DocumentEncryptionCert 動的パラメーターを追加します。これは、証明書プロバイダーが読み込まれたときにのみ使用できます。
パラメーター
-Content
暗号化するコンテンツを含む PSObject を指定します。 たとえば、イベント メッセージの内容を暗号化し、メッセージを含む変数 ($Event
この例では ) を Content パラメーターの値として使用できます。 $event = Get-WinEvent -ProviderName "PowerShell" -MaxEvents 1
コマンドレットをGet-Content
使用して、Microsoft Word ドキュメントなどのファイルの内容を取得し、Content パラメーターの値として使用する変数にコンテンツを保存することもできます。
Type: | PSObject |
Position: | 1 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-LiteralPath
暗号化するコンテンツへのパスを指定します。 Path とは異なり、LiteralPath の値は入力した内容のまま使用されます。 ワイルドカードとして解釈される文字はありません。 パスにエスケープ文字が含まれている場合は、単一引用符で囲みます。 単一引用符は、文字をエスケープ シーケンスとして解釈しないように PowerShell に指示します。
Type: | String |
Position: | 1 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-OutFile
暗号化されたコンテンツを送信するファイルのパスとファイル名を指定します。
Type: | String |
Position: | 2 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Path
暗号化するコンテンツへのパスを指定します。
Type: | String |
Position: | 1 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-To
次のいずれかの形式で識別される 1 つ以上の CMS メッセージ受信者を指定します。
- 実際の証明書 (証明書プロバイダーから取得)。
- 証明書を含むファイルへのパス。
- 証明書を含むディレクトリへのパス。
- 証明書の拇印 (証明書ストアの検索に使用されます)。
- 証明書のサブジェクト名 (証明書ストアの検索に使用されます)。
Type: | CmsMessageRecipient[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |