ค้นหาเว็บไซต์

ป้องกัน CmsMessage (Microsoft.PowerShell.Security)


Protect-CmsMessage

โมดูล :
Microsoft.PowerShell.Security

เข้ารหัสเนื้อหาโดยใช้รูปแบบไวยากรณ์ข้อความเข้ารหัสลับ

ไวยากรณ์

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>]

คำอธิบาย

cmdlet Protect-CmsMessage เข้ารหัสเนื้อหาโดยใช้รูปแบบไวยากรณ์ข้อความที่เข้ารหัสลับ (CMS)

CMS cmdlet รองรับการเข้ารหัสและถอดรหัสเนื้อหาโดยใช้รูปแบบ IETF ตามที่จัดทำเอกสารโดย RFC5652

มาตรฐานการเข้ารหัส CMS ใช้การเข้ารหัสคีย์สาธารณะ โดยคีย์ที่ใช้ในการเข้ารหัสเนื้อหา (คีย์สาธารณะ) และคีย์ที่ใช้ในการถอดรหัสเนื้อหา (คีย์ส่วนตัว) จะแยกจากกัน รหัสสาธารณะของคุณสามารถแชร์ได้อย่างกว้างขวาง และไม่ใช่ข้อมูลที่ละเอียดอ่อน หากเนื้อหาใดถูกเข้ารหัสด้วยคีย์สาธารณะนี้ มีเพียงคีย์ส่วนตัวของคุณเท่านั้นที่สามารถถอดรหัสได้ สำหรับข้อมูลเพิ่มเติม โปรดดูที่ การเข้ารหัสคีย์สาธารณะ

ก่อนที่คุณจะสามารถเรียกใช้ cmdlet Protect-CmsMessage ได้ คุณต้องตั้งค่าใบรับรองการเข้ารหัสก่อน เพื่อให้ได้รับการยอมรับใน PowerShell ใบรับรองการเข้ารหัสจำเป็นต้องมี ID การใช้คีย์เพิ่มเติม (EKU) ที่ไม่ซ้ำกันเพื่อระบุเป็นใบรับรองการเข้ารหัสข้อมูล (เช่น ID สำหรับการลงนามโค้ดและเมลที่เข้ารหัส) สำหรับตัวอย่างใบรับรองที่จะใช้กับการเข้ารหัสเอกสาร โปรดดูตัวอย่างที่ 1 ในหัวข้อนี้

เพิ่มการสนับสนุนสำหรับ Linux และ macOS ใน PowerShell 7.1

ตัวอย่าง

ตัวอย่างที่ 1: สร้างใบรับรองสำหรับการเข้ารหัสเนื้อหา

ก่อนที่คุณจะสามารถเรียกใช้ cmdlet 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 cmdlet จากนั้นบันทึกข้อความที่เข้ารหัสในตัวแปร พารามิเตอร์ ถึง ใช้ค่าของบรรทัดหัวเรื่องในใบรับรอง

ตัวอย่างที่ 3: ดูใบรับรองการเข้ารหัสเอกสาร

PS C:\> cd Cert:\CurrentUser\My
PS Cert:\CurrentUser\My> Get-ChildItem -DocumentEncryptionCert

หากต้องการดูใบรับรองการเข้ารหัสเอกสารในผู้ให้บริการใบรับรอง คุณสามารถเพิ่มพารามิเตอร์ไดนามิก DocumentEncryptionCert ของ Get-ChildItem ซึ่งจะใช้ได้เฉพาะเมื่อมีการโหลดผู้ให้บริการใบรับรองแล้วเท่านั้น

พารามิเตอร์

-Content

ระบุ PSObject ที่มีเนื้อหาที่คุณต้องการเข้ารหัส ตัวอย่างเช่น คุณสามารถเข้ารหัสเนื้อหาของข้อความเหตุการณ์ จากนั้นใช้ตัวแปรที่มีข้อความ ($Event ในตัวอย่างนี้) เป็นค่าของพารามิเตอร์ เนื้อหา : <รหัส>$event=Get-WinEvent -ProviderName "PowerShell" -MaxEvents 1 คุณยังสามารถใช้ Get-Content cmdlet เพื่อรับเนื้อหาของไฟล์ เช่น เอกสาร Microsoft Word และบันทึกเนื้อหาในตัวแปรที่คุณใช้เป็นค่าของ เนื้อหา พารามิเตอร์

พิมพ์ :

PSObject

ตำแหน่ง:

1

ค่าเริ่มต้น:

None

ที่จำเป็น:

True

ยอมรับอินพุตไปป์ไลน์:

True

ยอมรับอักขระตัวแทน:

False

-LiteralPath

ระบุเส้นทางไปยังเนื้อหาที่คุณต้องการเข้ารหัส ต่างจาก เส้นทาง ค่าของ LiteralPath จะถูกใช้ตรงตามที่พิมพ์ทุกประการ ไม่มีอักขระใดที่ถูกตีความว่าเป็นไวด์การ์ด หากเส้นทางมีอักขระเลี่ยง ให้ใส่เครื่องหมายคำพูดเดี่ยว เครื่องหมายคำพูดเดี่ยวบอกให้ PowerShell ไม่ต้องตีความอักขระใดๆ เป็นลำดับหลีก

พิมพ์ :

String

ตำแหน่ง:

1

ค่าเริ่มต้น:

None

ที่จำเป็น:

True

ยอมรับอินพุตไปป์ไลน์:

False

ยอมรับอักขระตัวแทน:

False

-OutFile

ระบุเส้นทางและชื่อไฟล์ของไฟล์ที่คุณต้องการส่งเนื้อหาที่เข้ารหัสไป

พิมพ์ :

String

ตำแหน่ง:

2

ค่าเริ่มต้น:

None

ที่จำเป็น:

False

ยอมรับอินพุตไปป์ไลน์:

False

ยอมรับอักขระตัวแทน:

False

-Path

ระบุเส้นทางไปยังเนื้อหาที่คุณต้องการเข้ารหัส

พิมพ์ :

String

ตำแหน่ง:

1

ค่าเริ่มต้น:

None

ที่จำเป็น:

True

ยอมรับอินพุตไปป์ไลน์:

False

ยอมรับอักขระตัวแทน:

False

-To

ระบุผู้รับข้อความ CMS อย่างน้อย 1 รายการ ระบุในรูปแบบใดๆ ต่อไปนี้:

  • ใบรับรองจริง (ตามที่ดึงมาจากผู้ให้บริการใบรับรอง)
  • เส้นทางไปยังไฟล์ที่มีใบรับรอง
  • เส้นทางไปยังไดเร็กทอรีที่มีใบรับรอง
  • รหัสประจำตัวของใบรับรอง (ใช้ในการค้นหาในที่เก็บใบรับรอง)
  • ชื่อเรื่องของใบรับรอง (ใช้ในการค้นหาในที่เก็บใบรับรอง)
พิมพ์ :

CmsMessageRecipient[]

ตำแหน่ง:

0

ค่าเริ่มต้น:

None

ที่จำเป็น:

True

ยอมรับอินพุตไปป์ไลน์:

False

ยอมรับอักขระตัวแทน:

False

บทความที่เกี่ยวข้อง