Clé privée du certificat d'autorisations dans .NET 6

0

La question

J'essaie d'importer un certificat avec la clé privée dans le Magasin de Certificats Windows. Je peux importer le certificat à l'aide de la ci-dessous

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

Mais le problème que j'ai est, comment donner à un utilisateur l'accès à la clé privée de la programmation.
J'ai trouvé ces liens utiles:
https://www.pkisolutions.com/accessing-and-using-certificate-private-keys-in-net-framework-net-core/
CngKey Affecter l'autorisation de clé machine

Jeu de Certificat PrivateKey Autorisations dans .NET 5

Je peux accorder l'accès via l'INTERFACE utilisateur avec certlm.msc > faites Glisser certificat au magasin Personnel > cliquez-Droit sur le certificat > Toutes les Tâches > Gérer les clés privées > Ajouter l'utilisateur et l'autorisation
Mais j'ai besoin de le faire par programmation

Il y a des changements de .NET, Plein Cadre, qui est l'endroit où les exemples proviennent. J'ai passé plus d'une journée sur l', essayé plusieurs certificats, le certificat est certainement marquée comme étant exportable et l'exécution de VS en tant qu'administrateur. Je suis heureux avec un Windows seule solution

C'est à peu près aussi proche que j'ai

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

Je peux voir le rsaCng.Clé présente en debug, mais il échoue sur la ligne suivante (c'est certainement exportable) l'obtention de la propriété avec Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicException: 'Key not valid for use in specified state.' J'ai également lire les commentaires que vous ne devriez pas essayer le réglage de l'acl directement sur le fichier, mais vous ne savez pas si c'est correct ou pas

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

La meilleure réponse

0

Voir ce projet de code post pour un exemple de code qui donne accès par programme (en particulier à la "AddAccessToCertificate" la méthode).

Cochez cette pour plus d'info: ajouter par programme de certificat au magasin personnel

2021-12-02 16:48:54

Dans d'autres langues

Cette page est dans d'autres langues

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