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-ChildItem の DocumentEncryptionCert 動的パラメーターを追加します。このパラメーターは、証明書プロバイダーが読み込まれている場合にのみ使用できます。
パラメーター
-Content
暗号化するコンテンツを含む PSObject を指定します。 たとえば、イベント メッセージの内容を暗号化し、メッセージを含む変数 (この例では$Event
) を Content パラメーターの値として使用できます: $event = Get-WinEvent -ProviderName "PowerShell" -MaxEvents 1
。 Get-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 |
関連リンク
PowerShell