ผู้ดูแลระบบ 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
ขอแนะนำให้ใช้ใบรับรองที่ลงนามเองเพื่อวัตถุประสงค์ในการทดสอบหรือเพื่อให้ใบรับรองสำหรับบริการอินทราเน็ตภายใน (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
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 ปี .
การใช้ Get-ChildItem cmdlet คุณสามารถแสดงพารามิเตอร์ทั้งหมดของใบรับรองที่สร้างขึ้นโดยใช้ Thumbprint:
Get-ChildItem -Path "Cert:\LocalMachine\My" | รอยนิ้วหัวแม่มือของวัตถุอยู่ที่ไหน -eq 2175A76B10F843676951965F52A718F635FFA043 | เลือกวัตถุ *
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.>
คีย์สาธารณะของใบรับรองสามารถส่งออกได้ดังนี้:
Export-Certificate -Cert Cert:\LocalMachine\My\2779C7928D055B21AAA0Cfe2F6BE1A5C2CA83B30 -FilePath C:\tstcert.cer
ตรวจสอบให้แน่ใจว่าไฟล์ใบรับรอง *.cer (PFX) ปรากฏในไดเร็กทอรีที่ระบุ หากคุณคลิกขวาและเลือก “ติดตั้งใบรับรอง ” รายการเมนู คุณสามารถใช้ ตัวช่วยสร้างการนำเข้าใบรับรอง เพื่อเพิ่มใบรับรองไปยังใบรับรองหลักที่เชื่อถือได้บนคอมพิวเตอร์ของคุณ
เลือกที่ตั้งของ Cert Store -> เครื่องในเครื่อง , วางใบรับรองทั้งหมดในร้านค้าต่อไปนี้ -> ผู้ออกใบรับรองหลักที่เชื่อถือได้ .
คุณสามารถสร้างใบรับรองและนำเข้าใบรับรองไปยังร้านค้า 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
นอกจากนี้ คุณยังสามารถสร้าง ตัวแทน ใบรับรองสำหรับเนมสเปซโดเมนทั้งหมด ในการดำเนินการ ให้ระบุ *.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 เป็นระยะเพื่อค้นหาใบรับรองที่ไม่น่าเชื่อถือและน่าสงสัย และอัปเดตรายการใบรับรองหลักที่เชื่อถือได้)
ย้าย-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
คุณสามารถผูกใบรับรอง SHA-256 ที่ลงนามเองซึ่งสร้างด้วย PowerShell กับไซต์ IIS บน Windows Server หากคุณสร้างใบรับรอง SSL โดยใช้ PowerShell และเก็บไว้ในที่เก็บใบรับรองของคอมพิวเตอร์ ใบรับรองนั้นจะพร้อมใช้งานในไซต์ IIS โดยอัตโนมัติ
เริ่มคอนโซล IIS Manager เลือกไซต์ของคุณ จากนั้นใน Site Binding ตัวเลือก เลือกใบรับรองที่คุณสร้างและบันทึกการเปลี่ยนแปลงของคุณ