Computer >> คอมพิวเตอร์ >  >> ระบบ >> Windows Server

วิธีสร้างใบรับรองที่ลงนามเองใน Windows ด้วย PowerShell

ผู้ดูแลระบบ Windows ส่วนใหญ่ที่คุ้นเคยกับ PKI จะทราบเกี่ยวกับ MakeCert.exe เครื่องมือซึ่งอนุญาตให้สร้างใบรับรองที่ลงนามเอง เครื่องมือนี้เป็นส่วนหนึ่งของ Microsoft .NET Framework SDK และ Microsoft Windows SDK ใน Windows เวอร์ชันใหม่ (Windows 10/8.1 และ Windows Server 2019/2016/2012R2) คุณสามารถสร้างใบรับรองที่ลงนามเองได้โดยใช้ PowerShell cmdlet ในตัว New-SelfSignedCertificate โดยไม่ต้องใช้เครื่องมือเพิ่มเติม

การใช้ New-SelfSignedCertificate PowerShell Cmdlet เพื่อสร้างใบรับรองที่ลงชื่อด้วยตนเอง

ในการสร้างใบรับรองที่ลงนามเองด้วย PowerShell คุณสามารถใช้ New-SelfSignedCertificate cmdlet ซึ่งเป็นส่วนหนึ่งของ PoSh PKI (โครงสร้างพื้นฐานคีย์สาธารณะ):

หากต้องการแสดงรายการ cmdlet ที่พร้อมใช้งานทั้งหมดในโมดูล PKI ให้เรียกใช้คำสั่ง

รับคำสั่ง -Module PKI

วิธีสร้างใบรับรองที่ลงนามเองใน Windows ด้วย PowerShell

ขอแนะนำให้ใช้ใบรับรองที่ลงนามเองเพื่อวัตถุประสงค์ในการทดสอบหรือเพื่อให้ใบรับรองสำหรับบริการอินทราเน็ตภายใน (IIS, Exchange, Web Application Proxy, LDAPS, ADRMS, DirectAccess เป็นต้น) หากคุณไม่สามารถปรับใช้โครงสร้างพื้นฐาน PKI/CA หรือซื้อที่เชื่อถือได้ ใบรับรองจากผู้ให้บริการภายนอก

เคล็ดลับ . อย่าลืมว่าคุณสามารถรับใบรับรอง SSL ฟรีจาก Let's Encrypt ได้อย่างง่ายดาย ต่อไปนี้คือตัวอย่างวิธีการออกใบรับรอง Let's Encrypt SSL และผูกกับไซต์ IIS บน Windows Server

ในการสร้างใบรับรอง คุณต้องระบุค่าของ –DnsName (ชื่อเซิร์ฟเวอร์ ชื่ออาจจะกำหนดเองได้และแตกต่างจากชื่อ localhost) และ -CertStoreLocation (ที่เก็บใบรับรองในเครื่องที่จะวางใบรับรองที่สร้างขึ้น) คุณสามารถใช้ cmdlet เพื่อสร้างใบรับรองแบบลงนามเองใน Windows 10 (ในตัวอย่างนี้), Windows 8.1 และ Windows Server 2019/2016/ 2012 R2 /2012

เมื่อต้องการสร้างใบรับรอง SSL ใหม่ (ของชนิด SSLServerAuthentication เริ่มต้น) สำหรับชื่อ DNS test.contoso.com (ใช้ชื่อ FQDN) และวางลงในรายการใบรับรองส่วนบุคคลบนคอมพิวเตอร์ ให้เรียกใช้คำสั่งต่อไปนี้:

ใหม่-SelfSignedCertificate -DnsName test.contoso.com -CertStoreLocation cert:\LocalMachine\My

วิธีสร้างใบรับรองที่ลงนามเองใน Windows ด้วย PowerShell

Directory: Microsoft.PowerShell.Security\Certificate::LocalMachine\My
Thumbprint                               Subject
----------                               -------
2175A76B10F843676951965F52A718F635FFA043   CN=test.contoso.com
หากคุณเรียกใช้คำสั่งนี้ในเซสชัน PowerShell ที่ไม่ได้ยกระดับ (โดยไม่ได้รับอนุญาตจากผู้ดูแลระบบภายใน) ข้อผิดพลาดจะปรากฏขึ้น:

New-SelfSignedCertificate : CertEnroll::CX509Enrollment::_CreateRequest: Access denied. 0x80090010 (-2146893808 NTE_PERM)

หากคุณได้ระบุผู้ให้บริการการเข้ารหัสลับที่ไม่ได้มาตรฐาน (CSP) ตัวอย่างเช่น การใช้ -KeyAlgorithm "ECDSA_secP256r1" -Provider "Microsoft Smart Card Key Storage Provider" ตรวจสอบให้แน่ใจว่าได้ติดตั้งบนคอมพิวเตอร์ของคุณแล้ว (ค่าเริ่มต้นคือ Microsoft Enhanced Cryptographic Provider CSP) มิฉะนั้น จะเกิดข้อผิดพลาด:

New-SelfSignedCertificate: CertEnroll::CX509Enrollment::_CreateRequest: Provider type not defined. 0x80090017 (-2146893801 NTE_PROV_TYPE_NOT_DEF).

คำสั่งนี้สร้างใบรับรองใหม่และนำเข้าในที่เก็บใบรับรองส่วนบุคคลของคอมพิวเตอร์ เปิด certlm.msc สแน็ปอิน MMC ตรวจสอบให้แน่ใจว่าใบรับรองใหม่ปรากฏในส่วน ส่วนบุคคล ส่วนของที่เก็บใบรับรอง

โดยค่าเริ่มต้น ใบรับรองที่ลงนามเองจะถูกสร้างขึ้นด้วยการตั้งค่าต่อไปนี้:

  • อัลกอริทึมการเข้ารหัส: RSA;
  • ความยาวของคีย์:2048 บิต;
  • การใช้คีย์ที่ยอมรับได้: การตรวจสอบสิทธิ์ไคลเอ็นต์ และ การตรวจสอบเซิร์ฟเวอร์;
  • ใบรับรองใช้สำหรับ: ลายเซ็นดิจิทัล , การเข้ารหัสคีย์;
  • อายุใบรับรอง:1 ปี .
อย่างที่คุณเห็น คุณสมบัติของใบรับรองระบุว่าใบรับรองนี้สามารถใช้สำหรับการตรวจสอบสิทธิ์ของไคลเอ็นต์ แต่ก็ใช้ได้กับการตรวจสอบเซิร์ฟเวอร์ด้วย

วิธีสร้างใบรับรองที่ลงนามเองใน Windows ด้วย PowerShell

การใช้ Get-ChildItem cmdlet คุณสามารถแสดงพารามิเตอร์ทั้งหมดของใบรับรองที่สร้างขึ้นโดยใช้ Thumbprint:

Get-ChildItem -Path "Cert:\LocalMachine\My" | รอยนิ้วหัวแม่มือของวัตถุอยู่ที่ไหน -eq 2175A76B10F843676951965F52A718F635FFA043 | เลือกวัตถุ *

วิธีสร้างใบรับรองที่ลงนามเองใน Windows ด้วย PowerShell

PSPath                   : Microsoft.PowerShell.Security\Certificate::LocalMachine\My\2175A76B10F843676951965F52A718F635FFA043
PSParentPath             : Microsoft.PowerShell.Security\Certificate::LocalMachine\My
PSChildName              : 2175A76B10F843676951965F52A718F635FFA043
PSDrive                  : Cert
PSProvider               : Microsoft.PowerShell.Security\Certificate
PSIsContainer            : False
EnhancedKeyUsageList     : {Client Authentication (1.3.6.1.5.5.7.3.2), Server Authentication (1.3.6.1.5.5.7.3.1)}
DnsNameList              : {test.contoso.com}
SendAsTrustedIssuer      : False
EnrollmentPolicyEndPoint : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty
EnrollmentServerEndPoint : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty
PolicyId                 :
Archived                 : False
Extensions               : {System.Security.Cryptography.Oid, System.Security.Cryptography.Oid,
System.Security.Cryptography.Oid, System.Security.Cryptography.Oid}
FriendlyName             :
IssuerName               : System.Security.Cryptography.X509Certificates.X500DistinguishedName
NotAfter                 : 05/11/2021 06:19:42
NotBefore                : 05/11/2020 05:59:42
HasPrivateKey            : True
PrivateKey               :
PublicKey                : System.Security.Cryptography.X509Certificates.PublicKey
RawData                  : {48, 130, 3, 45...}
SerialNumber             : 6797F5E3F870478D4D3798BEB291DBF3
SubjectName              : System.Security.Cryptography.X509Certificates.X500DistinguishedName
SignatureAlgorithm       : System.Security.Cryptography.Oid
Thumbprint               : 2175A76B10F843676951965F52A718F635FFA043
Version                  : 3
Handle                   : 2834444631568
Issuer                   : CN=test.contoso.com
Subject                  : CN=test.contoso.com
หมายเหตุ . ใบรับรองที่ลงนามเองดังกล่าวจะหมดอายุใน 1 ปีนับจากวันที่สร้าง คุณสามารถกำหนดระยะเวลาหมดอายุของใบรับรองอื่นได้โดยใช้ –NotAfter ตัวเลือก. ตัวอย่างเช่น คุณสามารถออกใบรับรอง SSL/TLS ที่มีระยะเวลาสามปีโดยใช้คำสั่งต่อไปนี้:

$todaydt =Get-Date
$3years =$todaydt.AddYears(3)
New-SelfSignedCertificate -dnsname test.contoso.com -notafter $3years -CertStoreLocation cert:\LocalMachine\My

คุณสามารถสร้างสายใบรับรอง ขั้นแรก สร้างใบรับรองหลัก (CA) และสร้างใบรับรองเซิร์ฟเวอร์ SSL ตามนั้น:

$rootCert =New-SelfSignedCertificate -Subject 'CN=TestRootCA,O=TestRootCA,OU=TestRootCA' -KeyExportPolicy Exportable  -KeyUsage CertSign,CRLSign,DigitalSignature -KeyLength 2048 -KeyUsageProperty ทั้งหมด'SAgorian -ผู้ให้บริการ 'Microsoft Enhanced RSA และ AES Cryptographic Provider'
New-SelfSignedCertificate -CertStoreLocation cert:\LocalMachine\My -DnsName "test2.contoso.com" -Signer $rootCert -KeyUsage KeyEncipherment,DigitalSignature

ในการส่งออกใบรับรองที่สร้างด้วยคีย์ส่วนตัวไปยังไฟล์ PFX ที่ป้องกันด้วยรหัสผ่าน คุณต้องระบุ Thumbprint สามารถคัดลอกได้จากผลลัพธ์ของคำสั่ง New-SelfSignedCertificate คุณต้องระบุรหัสผ่านความปลอดภัยของใบรับรองและแปลงเป็นรูปแบบ SecureString:

$CertPassword =ConvertTo-SecureString -String “YourPassword” -Force –AsPlainText
Export-PfxCertificate -Cert cert:\LocalMachine\My\2779C7928D055B21AAA0Cfe2F6BE1A5FileC2CA83B30 -Test.>

วิธีสร้างใบรับรองที่ลงนามเองใน Windows ด้วย PowerShell

คีย์สาธารณะของใบรับรองสามารถส่งออกได้ดังนี้:

Export-Certificate -Cert Cert:\LocalMachine\My\2779C7928D055B21AAA0Cfe2F6BE1A5C2CA83B30 -FilePath C:\tstcert.cer

ตรวจสอบให้แน่ใจว่าไฟล์ใบรับรอง *.cer (PFX) ปรากฏในไดเร็กทอรีที่ระบุ หากคุณคลิกขวาและเลือก “ติดตั้งใบรับรอง ” รายการเมนู คุณสามารถใช้ ตัวช่วยสร้างการนำเข้าใบรับรอง เพื่อเพิ่มใบรับรองไปยังใบรับรองหลักที่เชื่อถือได้บนคอมพิวเตอร์ของคุณ

วิธีสร้างใบรับรองที่ลงนามเองใน Windows ด้วย PowerShell

เลือกที่ตั้งของ Cert Store -> เครื่องในเครื่อง , วางใบรับรองทั้งหมดในร้านค้าต่อไปนี้ -> ผู้ออกใบรับรองหลักที่เชื่อถือได้ .

วิธีสร้างใบรับรองที่ลงนามเองใน Windows ด้วย PowerShell

คุณสามารถสร้างใบรับรองและนำเข้าใบรับรองไปยังร้านค้า Trusted Root Certificate ของคอมพิวเตอร์ได้ทันทีโดยใช้คำสั่ง:
$SelfSignCert=New-SelfSignedCertificate …..
$certFile =Export-Certificate -Cert $SelfSignCert -FilePath C:\ps\export-certname.cer
Import-Certificate -CertStoreLocation Cert:\LocalMachine\AuthRoot -FilePath $certFile.FullName

คีย์สาธารณะนี้หรือไฟล์ใบรับรองสามารถปรับใช้กับคอมพิวเตอร์และเซิร์ฟเวอร์ทั้งหมดในโดเมน Active Directory โดยใช้ GPO (จะปรับใช้ใบรับรองบนคอมพิวเตอร์โดเมนโดยใช้ GPO ได้อย่างไร)

สร้างใบรับรองที่ลงนามเองด้วยชื่อทางเลือกของหัวเรื่อง

หนึ่งในคุณสมบัติที่มีประโยชน์ของ cmdlet ของ New-SelfSignedCertificate คือความสามารถในการสร้างใบรับรองที่มีชื่อต่างๆ มากมาย Subject Alternative Names (SAN) .

หมายเหตุ . Makecert.exe เครื่องมือไม่เหมือนกับ cmdlet ของ New-SelfSignedCertificate ไม่สามารถสร้างใบรับรอง SAN และ Wildcard

หากคุณต้องการสร้างใบรับรองที่มีหลายชื่อ ชื่อของพารามิเตอร์ DnsName จะถูกใช้เป็น CN (Common Name) ของใบรับรอง ตัวอย่างเช่น มาสร้างใบรับรอง SAN ที่ลงนามเองโดยใช้ชื่อต่อไปนี้:

  • ชื่อเรื่อง (CN):adfs1.contoso.com
  • ชื่อทางเลือกของหัวเรื่อง (DNS):web_gw.contoso.com
  • ชื่อทางเลือกของหัวเรื่อง (DNS):enterprise_reg.contoso.com

คำสั่งสำหรับสร้างใบรับรองจะมีลักษณะดังนี้:

ใหม่-SelfSignedCertificate -DnsName adfs1.contoso.com,web_gw.contoso.com,enterprise_reg.contoso.com -CertStoreLocation ใบรับรอง:\LocalMachine\My

วิธีสร้างใบรับรองที่ลงนามเองใน Windows ด้วย PowerShell

นอกจากนี้ คุณยังสามารถสร้าง ตัวแทน ใบรับรองสำหรับเนมสเปซโดเมนทั้งหมด ในการดำเนินการ ให้ระบุ *.contoso.com เป็นชื่อเซิร์ฟเวอร์

New-SelfSignedCertificate -certstorelocation cert:\localmachine\my -dnsname *.contoso.com

สร้างใบรับรองที่ลงชื่อด้วยตนเองสำหรับการลงชื่อรหัสบน Windows

ใน PoweShell 3.0 cmdlet ของ New-SelfSifgnedCertificate จะสร้างใบรับรอง SSL ที่ไม่สามารถใช้ลงนามในไดรเวอร์ แอปพลิเคชัน หรือรหัสสคริปต์ได้เท่านั้น (ต่างจากใบรับรองที่สร้างโดยยูทิลิตี้ MakeCert)

ใน PowerShell เวอร์ชัน 5.0 และใหม่กว่า ตอนนี้สามารถใช้ cmdlet ของ New-SelfSifgnedCertificate เวอร์ชันใหม่เพื่อออก Code Signing ใบรับรอง

หากต้องการสร้างใบรับรองการลงชื่อรหัสแอปพลิเคชันที่ลงนามเอง ให้เรียกใช้คำสั่ง:

$cert =New-SelfSignedCertificate -Subject "My Code Signing Certificate” -Type CodeSigningCert -CertStoreLocation cert:\LocalMachine\My

ตอนนี้คุณสามารถเซ็น PowerShell Script ของคุณด้วยใบรับรองที่ลงนามเอง:

Set-AuthenticodeSignature -FilePath C:\PS\my_posh_script.ps1 -Certificate $cert

หากคุณได้รับ UnknownError คำเตือนเมื่อดำเนินการคำสั่ง หมายความว่าใบรับรองไม่น่าเชื่อถือ เนื่องจากอยู่ในที่เก็บใบรับรองส่วนบุคคลของผู้ใช้

วิธีสร้างใบรับรองที่ลงนามเองใน Windows ด้วย PowerShell

คุณต้องย้ายไปยังที่เก็บใบรับรองหลักที่เชื่อถือได้ (อย่าลืมสแกนที่เก็บใบรับรองรูทของใบรับรอง Windows เป็นระยะเพื่อค้นหาใบรับรองที่ไม่น่าเชื่อถือและน่าสงสัย และอัปเดตรายการใบรับรองหลักที่เชื่อถือได้)

ย้าย-Item -Path $cert.PSPath -Destination "Cert:\CurrentUser\Root"

หลังจากนั้น คุณสามารถลงนามในสคริปต์ PowerShell ด้วยใบรับรองที่ลงนามเองได้

การใช้ SHA-256 Self-Signed SSL Certificate ใน IIS บน Windows Server IIS

โปรดทราบว่าเมื่อสร้างใบรับรองที่ลงชื่อด้วยตนเองสำหรับ IIS ผ่านคอนโซล Internet Information Manager (สร้างใบรับรองที่ลงชื่อด้วยตนเอง รายการเมนูการดำเนินการ) ใบรับรอง SSL ถูกสร้างขึ้นโดยใช้อัลกอริธึมการเข้ารหัส SHA-1 ใบรับรองดังกล่าวได้รับการพิจารณาว่าไม่น่าเชื่อถือจากเบราว์เซอร์จำนวนมาก และไม่สามารถใช้เพื่อสร้างการเชื่อมต่อที่ปลอดภัยได้ (หรือคุณอาจเห็นข้อผิดพลาด SSL อื่นๆ) New-SelfSignedCertificate cmdlet ช่วยให้คุณสร้างใบรับรองที่ได้รับความนิยมมากขึ้นโดยใช้อัลกอริธึมการเข้ารหัส SHA-256

วิธีสร้างใบรับรองที่ลงนามเองใน Windows ด้วย PowerShell

คุณสามารถผูกใบรับรอง SHA-256 ที่ลงนามเองซึ่งสร้างด้วย PowerShell กับไซต์ IIS บน Windows Server หากคุณสร้างใบรับรอง SSL โดยใช้ PowerShell และเก็บไว้ในที่เก็บใบรับรองของคอมพิวเตอร์ ใบรับรองนั้นจะพร้อมใช้งานในไซต์ IIS โดยอัตโนมัติ

วิธีสร้างใบรับรองที่ลงนามเองใน Windows ด้วย PowerShell

เริ่มคอนโซล IIS Manager เลือกไซต์ของคุณ จากนั้นใน Site Binding ตัวเลือก เลือกใบรับรองที่คุณสร้างและบันทึกการเปลี่ยนแปลงของคุณ