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、暗号化されたメール用の ID など) として識別するために、一意の拡張キー使用法 (EKU) ID が必要です。 ドキュメントの暗号化に使用する証明書の例については、このトピックの例 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

証明書プロバイダーでドキュメント暗号化証明書を表示するには、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