ฉันพยายามที่จะใช้นำเข้าใบรับรองกับกุญแจส่วนตัวเข้าไปในหน้าต่างที่ออกใบรับรองร้าน ฉันสามารถเรียบร้อยแล้นำเข้าใบรับรองใช้ด้านล่างนี้
X509Certificate2 certificate = new(certByteArray, certPassword, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet);
X509Store store = new(StoreName.TrustedPeople, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadWrite);
store.Add(certificate);
แต่ปัญหาผมมีคือวิธีที่จะทำให้ผู้ใช้งานการกุญแจส่วนตัว programmatically.
ฉันเจอนี่ที่อยู่เชื่อมโยงช่วย:
https://www.pkisolutions.com/accessing-and-using-certificate-private-keys-in-net-framework-net-core/
CngKey กำหนดขออนุญาตเครื่องกุญแจ
ตั้งค่าใบรับรอง PrivateKey สิทธิ์ที่อนุญาตอยู่อข่ายนอก 5
ผมสามารถให้ในสิ่งที่ใช้งานผ่านทางคนส่วนติดต่อผู้ใช้กับ certlm.msc>ลากออกใบรับรองที่ส่วนตัวของร้าน>ยการคลิกเมาส์ปุ่มขวางใบรับรอง>งทุกทาสก์>จัดการกุญแจส่วนตัว>เพิ่มผู้ใช้และออนุญาต
แต่ฉันจำเป็นต้องทำอย่างนี้ programmatically
มีการเปลี่ยนอกจาก.อข่ายนอนเต็มเฟรมเวิร์กซึ่งเป็นที่ที่คนตัวอย่างจากมา ฉันใช้เวลามากกว่าที่เป็นอวันก่อนที่มันพยายามหลายใบรับรองอิเล็กทรอนิกส์,ออกใบรับรองเป็นอย่างแน่นทำเครื่องหมายที่ exportable และวิ่งหนีกับที่ผู้ดูแลระบบ. ฉันมีความสุขกับหน้าต่างเดียวที่แก้ปัญหา
นี่เป็นเรื่องใกล้ที่สุดเท่าที่ฉันมี
const string NCRYPT_SECURITY_DESCR_PROPERTY = "Security Descr";
const CngPropertyOptions DACL_SECURITY_INFORMATION = (CngPropertyOptions)4;
X509Store trustedPeopleStore = new(StoreName.TrustedPeople, StoreLocation.LocalMachine);
trustedPeopleStore.Open(OpenFlags.ReadWrite);
var certificates = trustedPeopleStore.Certificates.Find(X509FindType.FindByThumbprint, "xxxxxxxxxxxxxxxxxxxxxx", false);
RSA rsa = certificates[0].GetRSAPrivateKey();
RSACng rsaCng = rsa as RSACng;
CngProperty prop = rsaCng.Key.GetProperty(NCRYPT_SECURITY_DESCR_PROPERTY, DACL_SECURITY_INFORMATION);
ฉันสามารถเห็น rsaCng.กุญแจของขวัญในการดีบั๊ก,แต่มันล้มเหลวในบรรทัดถัดไป(แน่นอน\\\มันคือ exportable)ได้ทรัพย์สินกับ
Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicException: 'Key not valid for use in specified state.'
ฉันยังอ่านหมายเหตุนั้นคุณไม่ควรลองตั้งค่าที่เข่าโดยตรงแฟ้มแต่ไม่แน่ใจว่านั่นคือคำตอบที่ถูกต้องหรือไม่