Certificatul cheii private permisiuni .NET 6

0

Problema

Î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

.net acl c# cng
2021-11-24 00:59:41
1

Cel mai bun răspuns

0

Vezi acest cod proiect post pentru un exemplu de cod care permite accesul programatic (în special uita-te la "AddAccessToCertificate" metoda).

Verifica acest lucru pentru mai multe informatii: Programatic adăugarea certificat de la magazin personal

2021-12-02 16:48:54

În alte limbi

Această pagină este în alte limbi

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................