สร้างใบรับรอง PFX แล้ว แต่ไม่ได้เปิดใช้การเข้ารหัส


1

ฉันสร้างใบรับรอง PFX โดยใช้พรอมต์คำสั่งสำหรับนักพัฒนา Visual Studio ด้วยวิธีต่อไปนี้

makecert -r -pe -n "CN=mycert" -sky exchange "mycert.cer" -sv "mycert.pvk"
pvk2pfx -pvk "mycert.pvk" -spc "mycert.cer" -pfx "mycert.pfx" -pi [password]

จากนั้นฉันใช้ PowerShell เพื่อสอบปากคำใบรับรอง

$cert = Get-PfxCertificate [Location]
$cert.Verify()
# Returns 'False'

ฉันจะรับใบรับรองนี้เพื่อใช้ในการเข้ารหัสได้อย่างไร

ปรับปรุง

@root แนะนำโดยใช้Import-PfxCertificateคำสั่ง นี่คือสิ่งที่เกิดขึ้นเมื่อฉันเรียกใช้

Import-PfxCertificate -FilePath [Path]
Import-PfxCertificate : The PFX file you are trying to import requires either a different password or membership in an Active Directory principal to which it is protected.
At line:1 char:1
+ Import-PfxCertificate -FilePath [...]
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Import-PfxCertificate], Win32Exception
    + FullyQualifiedErrorId : System.ComponentModel.Win32Exception,Microsoft.CertificateServices.Commands.Im 
   portPfxCertificate

ปรับปรุงเพิ่มเติม

@ McDonald's แนะนำวิธีที่ปลอดภัยในการส่งรหัสผ่านไปยังImport-PfxCertificateคำสั่ง นี่คือสิ่งที่ฉันพยายาม;

Import-PfxCertificate -FilePath [Path] -Password (Get-Credential).Password
$cert = dir cert:\localmachine\my | where { $_.Thumbprint -eq [Thumbprint] } | Select-Object
$cert.Verify()

ยังคงกลับเท็จ มีประเด็นอื่นอีกหรือไม่



@ รูตฉันได้รับนั่นคือคำสั่ง PowerShell มันช่วยฉันได้อย่างไร คุณมีตัวอย่างหรือไม่
Steztric

มีสามตัวอย่างที่ด้านล่างของลิงค์นั้น
root

มันจะช่วยถ้าคุณพูดอะไรบางอย่างตามแนว "ต้องติดตั้งใบรับรองในที่เก็บใบรับรองของคุณเพื่อใช้สำหรับการเข้ารหัส" หากเป็นกรณีนี้จริง ๆ แล้วไม่ใช่แค่เชื่อมโยงฉันเข้ากับเอกสารประกอบสำหรับคำสั่งเฉพาะที่ ไม่ได้ให้เหตุผลแก่ฉันว่าทำไม$cert.Verify()ผลตอบแทนที่ผิดพลาด อย่างไรก็ตามเนื่องจากข้อผิดพลาดใหม่ที่ฉันพบฉันไม่คิดว่านี่เป็นปัญหาของฉัน ค่อนข้างมีการกำหนดค่าใบรับรองอย่างไม่ถูกต้อง คำถามของฉันเกี่ยวกับสาเหตุที่ใบรับรองกำหนดค่าไม่ถูกต้อง
Steztric

นี้อาจเพียงแค่เป็นปัญหา .... รหัสผ่านให้นี้ไวยากรณ์ยิง (เปลี่ยนสิ่งที่บังคับสำหรับระบบของคุณ แต่อย่างเห็นได้ชัด) และดูว่านี้จะทำให้ความแตกต่างสำหรับคุณ, กรุณาแจ้งกลับมาให้ฉันผลลัพธ์ของคุณ .... Import-PfxCertificate –FilePath C:\mycert.cer cert:\localMachine\my -Password (ConvertTo-SecureString -String "[Password]" -Force –AsPlainText).. .. technet.microsoft.com/en-us/itpro/powershell/windows/pkiclient/
Pimp Juice IT

คำตอบ:


4

Verifyวิธีการตรวจสอบว่าใบรับรองเป็นที่เชื่อถือได้ เพื่อดูว่าทำไมการตรวจสอบล้มเหลวเราจำเป็นต้องสร้างห่วงโซ่:

$cert = Get-PfxCertificate -FilePath .\mycert.pfx
$chain = New-Object System.Security.Cryptography.X509Certificates.X509Chain
$chain.Build($cert)
$chain.ChainStatus

เมื่อฉันทำซ้ำขั้นตอนของคุณและเรียกใช้คำสั่งที่ผมได้รับสถานะUntrustedRootของ ซึ่งหมายความว่าการตรวจสอบล้มเหลวเนื่องจากใบรับรองไม่ได้ลงนามโดยหน่วยงานออกใบรับรองที่เชื่อถือได้ซึ่งทำให้รู้สึกว่าเรากำลังเซ็นชื่อด้วยตนเอง ( -rสวิตช์เปิดmakecert)

หากต้องการตรวจสอบใบรับรองให้นำเข้าใบรับรองในที่เก็บที่เชื่อถือได้ของผู้ออกใบรับรองหลัก:

Import-PfxCertificate -CertStoreLocation Cert:\CurrentUser\Root -FilePath .\testcert.pfx -Password (Read-Host 'Password' -AsSecureString)

ป้อนรหัสผ่าน PFX ยอมรับข้อความเตือนใหญ่และจะเพิ่มใบรับรอง จากนั้นการตรวจสอบจะผ่าน ถ้าคุณชอบ GUIs certmgr.mscจะทำงาน


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

$public = Get-PfxCertificate .\mycert.cer
$public.PublicKey.Key.Encrypt(@(137), $false)

จากนั้นจำนวนไบต์ขนาดใหญ่ที่ได้รับการเข้ารหัสแล้ว (เรียกว่า$message) จะได้รับไปยังผู้ถือกุญแจส่วนตัวซึ่งจะกู้คืนหมายเลขเดิม:

$private = Get-PfxCertificate .\mycert.pfx
$private.PrivateKey.Decrypt($message)

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


Nice Ben ดูเหมือนว่าคุณใช้คำแนะนำของการโพสต์ MSDN และแสดงวิธีการตรวจสอบใบรับรองโดยตรงโดยใช้วัตถุ X509Chainแล้วให้คำแนะนำอื่น ๆ
Pimp Juice IT

@BenN ขอบคุณสำหรับพอยน์เตอร์ ดังนั้นปัญหาหลักของสิ่งที่ฉันพยายามทำคือว่าใบรับรองไม่น่าเชื่อถือโดยโฮสต์และต้องติดตั้งเป็นใบรับรองหลัก
Steztric

0

ฉันยอมรับคำตอบของ @ BenN แล้วนั่นเป็นทางออกที่แท้จริง ฉันต้องการดึงสิ่งที่ฉันได้เรียนรู้มาเป็นกระบวนการที่เหนียวแน่นเพื่อให้ผู้อื่นสร้างใบรับรองสำหรับการเข้ารหัสได้ง่าย

ขั้นตอนที่ 1: สร้างใบรับรอง

$publicCert = New-SelfSignedCertificate -DnsName $dnsName `
    -CertStoreLocation Cert:\LocalMachine\My

ใบรับรองไม่น่าเชื่อถือ

$publicCert.Verify()
False

ขั้นตอนที่ 2: ส่งออกใบรับรอง PFX

$cred = Get-Credential
Export-PfxCertificate -Cert $publicCert -FilePath $certPath -Password $cred.Password

ขั้นตอนที่ 3: ติดตั้งใบรับรองในที่เก็บใบรับรองหลัก

Import-PfxCertificate -FilePath $certPath -CertStoreLocation Cert:\CurrentUser\Root `
    -Password $cred.Password

ขั้นตอนที่ 4: ตรวจสอบใบรับรองอีกครั้ง

$publicCert.Verify()
True

จากนั้นคุณสามารถทำตามคำแนะนำของ @ BenN เกี่ยวกับวิธีใช้ใบรับรองเพื่อทำการถอดรหัส

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.