La clave privada del certificado de permisos .RED 6

0

Pregunta

Estoy tratando de importar un certificado con la clave privada en el Almacén de Certificados de Windows. Puedo importar correctamente el certificado con el siguiente

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

Pero el problema que tengo es, ¿cómo dar a un usuario el acceso a la clave privada mediante programación.
He encontrado estos enlaces útiles:
https://www.pkisolutions.com/accessing-and-using-certificate-private-keys-in-net-framework-net-core/
CngKey Asignar permiso a máquina clave

Certificado Set PrivateKey Permisos .NETO 5

Me pueden conceder el acceso a través de la interfaz de usuario con certlm.msc > Arrastre certificado Personal de la tienda > clic Derecho en el certificado de > Todas las Tareas > Administrar claves privadas > Añadir el usuario y el permiso
Pero necesito hacer esto mediante programación

Hay cambios de .NET Completo Marco que es donde los ejemplos provienen de. Me he pasado más de un día en él, probado con varios certificados, el certificado está definitivamente marcada como exportable y ejecución de VS como administrador. Soy feliz con un Windows única solución

Esto es lo más cercano que como tengo

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

Puedo ver la rsaCng.Clave presentes en la depuración, pero falla en la línea siguiente (que sin duda es exportable) obtener la propiedad con Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicException: 'Key not valid for use in specified state.' También he leído comentarios de que usted no debe tratar de configuración de la acl directamente en el archivo, pero no estoy seguro si eso es correcto o no

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

Mejor respuesta

0

Ver este proyecto de código post para el código de ejemplo que permite el acceso mediante programación (buscar específicamente en el "AddAccessToCertificate" método).

Compruebe aquí para más info: Programación de agregar el certificado al personal de la tienda

2021-12-02 16:48:54

En otros idiomas

Esta página está en otros idiomas

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