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 で暗号化証明書を認識するには、一意の拡張キー使用法 (EKU) ID を使用してデータ暗号化証明書 (コード署名用の 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-ChildItemDocumentEncryptionCert 動的パラメーターを追加します。このパラメーターは、証明書プロバイダーが読み込まれている場合にのみ使用できます。

パラメーター

-Content

暗号化するコンテンツを含む PSObject を指定します。 たとえば、イベント メッセージの内容を暗号化し、メッセージを含む変数 (この例では$Event) を Content パラメーターの値として使用できます: $event = Get-WinEvent -ProviderName "PowerShell" -MaxEvents 1Get-Content コマンドレットを使用して、Microsoft Word 文書などのファイルの内容を取得し、Content パラメーターの値として使用する変数にコンテンツを保存することもできます。

型:PSObject
配置:1
規定値:None
必須:True
パイプライン入力を受け取る:True
ワイルドカード文字を受け取る:False

-LiteralPath

暗号化するコンテンツへのパスを指定します。 Path とは異なり、LiteralPath の値は、型指定されたとおりに使用されます。 ワイルドカードとして解釈される文字はありません。 パスにエスケープ文字が含まれている場合は、単一引用符で囲みます。 単一引用符は、エスケープ シーケンスとして文字を解釈しないように PowerShell に指示します。

型:String
配置:1
規定値:None
必須:True
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-OutFile

暗号化されたコンテンツを送信するファイルのパスとファイル名を指定します。

型:String
配置:2
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Path

暗号化するコンテンツへのパスを指定します。

型:String
配置:1
規定値:None
必須:True
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-To

次のいずれかの形式で識別される 1 つ以上の CMS メッセージ受信者を指定します。

  • (証明書プロバイダーから取得された) 実際の証明書。
  • 証明書を含むファイルへのパス。
  • 証明書を含むディレクトリへのパス。
  • 証明書の拇印 (証明書ストアの検索に使用されます)。
  • 証明書のサブジェクト名 (証明書ストアの検索に使用されます)。
型:CmsMessageRecipient[]
配置:0
規定値:None
必須:True
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False