Certifikát, soukromý klíč oprávnění .NET 6

0

Otázka

Snažím se importovat certifikát s privátním klíčem do Úložiště Certifikátů Windows. Můžu úspěšně importovat certifikát pomocí níže

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 mám, je, jak dát uživateli přístup k soukromým klíčem programově.
Jsem našel tyto užitečné odkazy:
https://www.pkisolutions.com/accessing-and-using-certificate-private-keys-in-net-framework-net-core/
CngKey Přiřadit oprávnění stroj klíč

Nastavit Certifikát PrivateKey Oprávnění .NET 5

Můžu poskytnout přístup prostřednictvím ROZHRANÍ s certlm.msc > Přetáhněte certifikát do Osobního úložiště > klikněte Pravým tlačítkem myši certifikát > Všechny Úkoly - > Spravovat soukromé klíče > Přidat uživatele a povolení
Ale musím to udělat programově

Tam jsou změny .NET Plný Rámec, který je místo, kde příklady pocházejí. Jsem strávil více než den na to, se snažil více certifikátů, osvědčení, je určitě označen jako exportovatelný a běží VS jako správce. Jsem spokojený s Windows jediné řešení

Tohle je asi tak blízko, jak mám

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.Klíč přítomen v ladění, ale to se nezdaří na další řádek (to určitě je exportovat) získání majetku s Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicException: 'Key not valid for use in specified state.' Také jsem četl komentáře, že by jste to neměli zkusit nastavení acl přímo na soubor, ale není si jistý, jestli to je správné nebo ne

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

Nejlepší odpověď

0

Viz tento kód projektu post pro některé příklad kódu, který poskytuje přístup programově (konkrétně podívat na "AddAccessToCertificate" metoda).

Zaškrtněte toto políčko pro více info: Programově přidat certifikát do osobního úložiště

2021-12-02 16:48:54

V jiných jazycích

Tato stránka je v jiných jazycích

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