ป้องกัน 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