2012-05-21 19 views
10

Estoy tratando de guardar las llaves públicas y privadas en un contenedor utilizando el código siguiente:Ubicación del contenedor para claves públicas y privadas en Windows?

CspParameters cp = new CspParameters(); 
cp.KeyContainerName = "Test"; 
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cp); 

Lo que me gustaría saber es la ubicación del contenedor. ¿La ubicación del contenedor está en el sistema de archivos?

+0

Posiblemente en el directorio de su .exe – om471987

+2

no me sale ningún archivo nuevo dentro de mi directorio exe. – Thabo

Respuesta

19

Encontrará los archivos de claves en el siguiente directorio (*):

Path.Combine(
    Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), 
    @"Microsoft\Crypto\RSA\MachineKeys") 

Usted puede obtener el nombre de archivo para una clave dada de la siguiente manera:

CspParameters cp = ...; 
CspKeyContainerInfo info = new CspKeyContainerInfo(cp); 
string fileName = info.UniqueKeyContainerName; 

que no creen esta información está documentada, por lo que si la usa dependerá de detalles de implementación no documentados que pueden no funcionar en futuras versiones de Windows. Desafortunadamente, a veces es necesario usarlo; por ejemplo, as noted in this question, no creo que haya otra forma confiable de ver los permisos para un contenedor de claves RSA desde una cuenta no privilegiada.

(*) que es para llaves de máquina. teclas específicas del usuario son presumiblemente bajo Environment.SpecialFolder.LocalApplicationData

+0

Gracias ... está en lo correcto, no pude encontrar la información documentada en MSDN. En el futuro, puede estar obsoleto. D. Gracias de nuevo – Thabo

+5

Para mí, esta ruta se resolvió en 'C: \ ProgramData \ Microsoft \ Crypto \ RSA \ MachineKeys ' –

+0

Las claves específicas del usuario están en un directorio en Environment.SpecialFolder.ApplicationData –

2

Solía ​​Process Monitor y Sn.exe (Strong Name Tool) a conocer la ubicación de la carpeta en mi máquina de Windows 7 que contiene mis archivos de clave y por lo tanto confirmar la información en Joe's answer.

En primer lugar, me encontré con el monitor de procesos y especificó el siguiente filtro:

Column Relation Value Action 
--------------------------------------- 
Path  contains crypto Include 

entonces me encontré con la herramienta Strong Name (sn.exe) y daga; para extraer la clave pública del par de claves en mi contenedor VS_KEY_773685D47C32F8C7 y exportarlo a public_key.snk:

sn.exe -pc VS_KEY_773685D47C32F8C7 public_key.snk 

Después de hacerlo me di cuenta que Process Monitor indicó que sn.exe hicieron varias solicitudes de acceso a la carpeta:

C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys 

... y el archivo que contiene las llaves públicas y privadas para mi contenedor denominado VS_KEY_773685D47C32F8C7:

C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\74c2c10a37baa69f7969c7144db5805d_c55067c2-4a01-4792-9d70-d7a6e4799447 

& dagger;sn.exe se puede ejecutar cómodamente a través del Developer Command Prompt for Visual Studio.

Cuestiones relacionadas