Zezwolenia na klucz prywatny certyfikatu .NET 6

0

Pytanie

Próbuję zaimportować certyfikat z kluczem prywatnym w magazynie certyfikatów systemu Windows. Mogę z powodzeniem zaimportować certyfikat, za pomocą następującego

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 problem, z którym mam do czynienia, polega na tym, jak zapewnić użytkownikowi dostęp do klucza prywatnego programowo.
Znalazłem te linki przydatne:
https://www.pkisolutions.com/accessing-and-using-certificate-private-keys-in-net-framework-net-core/
CngKey Przypisuje pozwolenie na klucz maszynowy

Ustaw prawa dostępu do certyfikatu PrivateKey w .NET 5

Mogę zapewnić dostęp do interfejsu użytkownika za pomocą certlm.msc > Przeciągnij i upuść certyfikat w magazynie >> Kliknij prawym przyciskiem myszy certyfikat >>> Wszystkie zadania >>>> Zarządzanie kluczem prywatnym >>>>> Dodaj użytkownika i rozdzielczość
Ale muszę to zrobić programowo

Istnieją zmiany .NET Full Framework, z których pochodzą przykłady. Poświęciłem na to więcej dni, próbowałem kilka certyfikatów, certyfikat zdecydowanie jest oznaczony jako eksportowalny i działa w imieniu administratora. Jestem zadowolony z decyzji tylko dla systemu Windows

To jest zamknięty, co mam

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);

Widzę RSACng.Klucz jest do debugowania, ale się zawiesi w następnym wierszu (na pewno może być wyeksportowany), uzyskując właściwość Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicException: 'Key not valid for use in specified state.' Czytałem też komentarze o tym, że nie należy próbować instalować acl bezpośrednio w pliku, ale nie jestem pewien, czy jest to właściwe czy nie

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

Najlepsza odpowiedź

0

Cm. Ten post projektu kodu dla niektórych przykładów kodu, który zapewnia dostęp programowo (w szczególności spojrzeć na metodę "AddAccessToCertificate").

Sprawdź to aby uzyskać więcej informacji na: Programem dodawanie certyfikatu w magazynie

2021-12-02 16:48:54

W innych językach

Ta strona jest w innych językach

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