Pregunta Configurar la clave privada en el certificado bloquea el servicio de Windows


Tengo una aplicación y debo usar un certificado que requiere un pin desde la ventana de solicitud.

Tengo el siguiente código.

SecureString password = GetPassword();
X509Certificate2 certificate = GetCertificate();

var cspParameters = new CspParameters(1,
                                     "ProviderName",
                                     "KeyContainerName",
                                     null,
                                     password);

certificate.PrivateKey = new RSACryptoServiceProvider(cspParameters);

Todo funciona bien en la aplicación de la consola, pero cuando ejecuto el código en el servicio de Windows o la aplicación de la consola se inicia desde el programador de tareas, la aplicación se congela en esa línea.

certificate.PrivateKey = new RSACryptoServiceProvider(cspParameters);

Sin excepciones, sin progreso.

Estoy ejecutando el servicio de Windows con las mismas credenciales que una aplicación.

Windows 10 / Windows Server 2012

¿Tienes alguna idea de lo que está mal?


8
2018-01-24 18:39


origen


Respuestas:


Ok, después de un descanso encontré la solución.

Tuve que agregar personificación en esta línea:

certificate.PrivateKey = new RSACryptoServiceProvider(cspParameters);

Usé las mismas credenciales que en mi servicio y configuré LogonType como Interactivo.


1
2018-06-05 19:08



El problema es que aparece el mensaje PIN en el escritorio de la cuenta de servicio que no está expuesto al usuario de la consola (incluso si ambos se ejecutan bajo la misma cuenta). El servicio no se bloquea, espera la entrada del PIN y nunca lo recibirá.


0
2018-01-24 18:59