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