Estoy tratando de usar la clase HttpListener en una aplicación C# para que un mini servidor web sirva contenido a través de SSL. Para hacer esto, necesito usar la herramienta httpcfg. Tengo un archivo .pfx con mi par de claves públicas y privadas. Si importo este par de llaves manualmente usando mmc en la tienda de máquinas local, todo funciona bien. Sin embargo, si importo este par de claves mediante programación utilizando la clase X509Store, no puedo conectarme a mi mini servidor web. Tenga en cuenta que en ambos métodos, el certificado se importa a MY store en LocalMachine. Curiosamente, puedo ver el certificado en mmc una vez que lo importo programáticamente y cuando lo veo, la IU indica que también hay una clave privada disponible para este certificado.Importar certificado con clave privada mediante programación
Cavando un poco más profundo, observo que cuando importo manualmente el par de claves, puedo ver un nuevo archivo aparecer en C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys
, pero no aparece cuando lo importo mediante programación. En una nota relacionada, cuando elimino un certificado importado manualmente, no elimina el archivo de clave privada correspondiente del directorio mencionado anteriormente.
En última instancia, mi pregunta es esta: cuando programáticamente agrego el certificado a la tienda, ¿dónde se almacena la clave privada y por qué no está accesible para la clase HttpListener (HttpApi)?
cuenta que esta pregunta está ligeramente relacionado, pero no creo que para conceder permiso es el problema, ya que esto es todo lo que se haga con el mismo usuario de Windows: How to set read permission on the private key file of X.509 certificate from .NET
Marque esta como la respuesta – Developer
Lamentablemente, tengo que esperar 48 horas antes de hacerlo, y en ese momento probablemente me olvide de hacerlo. :( – Jason
Perdí unos 30 minutos tratando de entender por qué "X509KeyStorageFlags.MachineKeySet & X509KeyStorageFlags.PersistKeySet" no funcionaba. Por supuesto, debería ser "X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet". Bastante obvio, por si acaso alguien más intenta la misma estupidez que hice. –