Snažím sa importovať certifikát so súkromným kľúčom do Windows Certifikát Obchod. Môžem úspešne importovať certifikát pomocou nižšie
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);
Ale problém som dostal, ako dať používateľovi prístup do súkromného kľúča pomocou programovania.
Našiel som si tieto užitočné odkazy:
https://www.pkisolutions.com/accessing-and-using-certificate-private-keys-in-net-framework-net-core/
CngKey Priradiť povolenia na stroj kľúč
Nastaviť Certifikát PrivateKey práva .NET 5
Môžem udeliť prístup cez ROZHRANIE s certlm.msc > Ťahaním certifikát na Osobné store > kliknite Pravým tlačidlom myši certifikát > Všetky Úlohy > Spravovať súkromné kľúče > Pridať používateľa a povolenie
Ale musím to urobiť pomocou programovania
Tam sú zmeny z .ČISTÝ Celý Rámec, ktorý je miesto, kde príklady pochádzajú. Ja som strávil viac ako jeden deň na to, vyskúšali viaceré certifikáty, osvedčenia je určite označený ako exportovateľný a beží VS ako správca. Som spokojný s Windows jediné riešenie
To je asi tak blízko, ako som si
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);
Vidím rsaCng.Kľúčové prítomné v ladenie, ale nedarí sa na nasledujúcom riadku (to je určite exportovateľný) získavanie nehnuteľností s
Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicException: 'Key not valid for use in specified state.'
Tiež som čítal komentáre, ktoré by ste nemali skúste nastaviť acl priamo na súbor, ale nie je si istý, či to je správne alebo nie