Chiave privata del certificato di autorizzazioni .NETTO 6

0

Domanda

Sto cercando di importare un certificato con la chiave privata nell'Archivio Certificati di Windows. Posso importare il certificato utilizzando il seguente

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

Ma il problema che ho è come dare ad un utente di accedere alla chiave privata di a livello di programmazione.
Ho trovato questi link utile:
https://www.pkisolutions.com/accessing-and-using-certificate-private-keys-in-net-framework-net-core/
CngKey Assegnare il permesso di macchina chiave

Set Certificato PrivateKey Autorizzazioni .NETTO 5

Posso concedere l'accesso tramite l'interfaccia utente con certlm.msc > Trascinare certificato di archivio Personale > fare clic Destro il certificato > Tutte le Attività > Gestire le chiavi private > Aggiungere l'utente e l'autorizzazione
Ma ho bisogno di fare questo a livello di programmazione

Ci sono modifiche da .NET Framework, che è dove gli esempi provengono da. Ho trascorso più di un giorno su di esso, ha cercato più certificati, è definitivamente segnato come esportabile e l'esecuzione di VS come amministratore. Io sono felice con Windows unica soluzione

Questo è quanto di più vicino ho

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

Posso vedere il rsaCng.Chiave presenti in debug, ma non nella riga successiva (è sicuramente esportabile) ottenendo la proprietà con Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicException: 'Key not valid for use in specified state.' Ho anche letto commenti che non si deve provare a impostare le acl direttamente sul file, ma non so se è corretto o no

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

Migliore risposta

0

Vedere questo codice progetto post per un esempio di codice che consente l'accesso a livello di programmazione (in particolare di guardare "AddAccessToCertificate" metodo).

Selezionare questa opzione per ulteriori informazioni: aggiunta a livello di programmazione certificato di archivio personale

2021-12-02 16:48:54

In altre lingue

Questa pagina è in altre lingue

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