Încerc să importați un certificat cu cheie privată în Windows Certificate Store. Pot importa cu succes certificatul folosind de mai jos
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);
Dar problema care o am e, cum de a da unui utilizator acces la cheia privată programatic.
Am gasit aceste link-uri utile:
https://www.pkisolutions.com/accessing-and-using-certificate-private-keys-in-net-framework-net-core/
CngKey Atribuie permisiunea de a machine cheie
Set Certificat PrivateKey Permisiuni .NET 5
Pot acorda acces prin intermediul UI cu certlm.msc > Trageți certificat de la magazin Personal > click Dreapta certificat > Toate Sarcinile > Gestiona cheile private > Adăugați utilizatorul și permisiunea
Dar am nevoie pentru a face acest lucru în mod programatic
Există modificări la .Plin NET Framework, care este în cazul în care exemplele vin de la. Mi-am petrecut mai mult de o zi pe ea, a încercat de mai multe certificate, certificat este cu siguranta marcate ca exportabile și funcționare VS ca administrator. Eu sunt fericit cu un Windows singura soluție
Acest lucru este la fel de aproape ca am
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);
Eu pot vedea rsaCng.Cheie prezente în debug, dar nu pe linia următoare (cu siguranta este exportabil) obtinerea de proprietate cu
Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicException: 'Key not valid for use in specified state.'
De asemenea, am citit comentarii care nu ar trebui să încercați să setați acl direct pe fișier, dar nu sunt sigur dacă este corect sau nu