2009-11-05 37 views
13

Necesito dar acceso al usuario de IIS a un certificado pfx. El sitio web se está ejecutando en el grupo de aplicaciones en algún AppPoolUser usuario. IIS tiene automáticamente el nombre de usuario "IIS APPPOOL \ AppPoolUser" y esto es a lo que debemos dar acceso cuando utilizamos aspnet_regiis -ga.winhttpcertcfg que da acceso al usuario iiS en Windows 7

Sin embargo, cuando uso winhttpcertcfg para dar acceso al usuario "IIS APPPOOL \ AppPoolUser", dice "No se encontró información de cuenta".

El comando que utilizo es

winhttpcertcfg -i <filename> -c <certificateLocation> - g -a <account name> 

No se encontró ninguna muestras de este a través de Internet. ¿Algunas ideas?

+0

revise esto http://weblogs.asp.net/hernandl/archive/2005/02/09/WinHttpCertCfgTool.aspx Atentamente, Vivek – Vivek

+0

Ya probé esa muestra. Mi certificado tiene acceso a muchos usuarios ahora. Pool User, domain administrator, everyone ... Parece que el dominio de aplicación se ejecuta en "LocalSystem" y no veo la manera de dar acceso a este usuario como dice la documentación, este es el usuario con acceso de administrador. – bkhanal

Respuesta

3

Al instalar la aplicación es también añade la documentación:

C: \ Archivos de programa (x86) \ Windows Recursos Kits \ Tools

Los siguientes ejemplos muestran algunas de las formas en las que el herramienta de configuración puede ser utilizada.

Este comando enumera las cuentas que tienen acceso a la clave privada para el certificado "MyCertificate" en el almacén de certificados "Root" de la rama LOCAL_MACHINE del registro.

winhttpcertcfg -l -c LOCAL_MACHINE\Root -s MyCertificate 

Este comando subvenciones acceso a la clave privada del certificado "MyCertificate" en el "Mi" almacén de certificados para la cuenta test.

winhttpcertcfg -g -c LOCAL_MACHINE\My -s MyCertificate -a TESTUSER 

Este comando importa un certificado y una clave privada de un archivo PFX y extiende el acceso de la clave privada a otra cuenta.

winhttpcertcfg -i PFXFile -c LOCAL_MACHINE\My -a IWAM_TESTMACHINE 

Este comando elimina el acceso a la clave privada de la cuenta IWAM_TESTMACHINE con el título en cuestión.

winhttpcertcfg -r -c LOCAL_MACHINE\Root -s MyCertificate -a IWAM_TESTMACHINE 
+4

-1: copiar y pegar desde la documentación, especialmente cuando la documentación no funciona. –

11

Sé que es una vieja pregunta, pero sólo tenía ayer el mismo problema así que aunque me contesto.

tuve el mismo problema pero con un certificado ubicado en el LocalMachine -> TrustedPeople tienda ...

usted tiene que utilizar en lugar de icaclsWinHttpCertCfg, tomada de this link.

Básicamente, se debe tener este aspecto:

ICACLS <filename> /grant "IIS AppPool\DefaultAppPool":R 

En aras de finalización, aquí la forma en que tenía que hacer para acceder a la tienda "La gente de confianza". Tomado en parte de this link.

  1. Utilice la FindPrivateKey tool de Microsoft para localizar el archivo real para el certificado en el almacén. Esta herramienta debe compilarse desde el código fuente en .\WF_WCF_Samples\WCF\Setup\FindPrivateKey\CS desde la descarga Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4.

    FindPrivateKey.exe TrustedPeople LocalMachine -t "<thumbprint of the SSL cert>" 
    
  2. Uso icacls en el archivo indicado por el FindPrivateKey.

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\<path to certificate> /grant "IIS AppPool\<your AppPool name>":R 
    

Voilà!

+0

Has guardado mi cordura. Eso vale exactamente un voto positivo. –

+0

Después de usar ICACLS para otorgar el archivo pfx al grupo de aplicaciones, ¿qué debería poner en las clientCredentials de mi web.config? –

6

Para el post original, sólo tiene que reemplazar el dominio "IIS apppool" con el nombre de dominio local de su máquina - por lo general el mismo nombre que la máquina. Cuando WinHttpCertCfg se ejecuta, a su vez, <MachineName> \ <AppPoolUser> en < IIS apppool > \ <AppPoolUser> "y permitir el acceso a la certficate. Si quieres trabajar en un escritorio dev con IIS local, esto debería resolver su problema. ICACLS sólo funciona en los servidores (que en última instancia va a implementar a).

+0

+1 De hecho, esto funcionó para mí: 'winhttpcertcfg.exe -g -c LOCAL_MACHINE \ Mi -s MyCertName -a" MYMACHINENAME \ Name Of App Pool "' –

+0

localhost también funciona en lugar del nombre de máquina específico si quieres un script eso es más fácil de ejecutar en varios servidores – explunit

+0

FWIW, necesitaba incluir tanto el nombre de la máquina como IIS AppPool, por ejemplo: 'winhttpcertcfg.exe -g -c LOCAL_MACHINE \ Mi -s MyCertName -a" MYMACHINENAME \ IIS AppPool \ AppPoolUser "' –

6

también puede hacerlo desde el mmc complemento Certificados.

Simplemente haga clic en el certificado en cuestión, elegir All Tasks -> Manage private keys..., y añadir el usuario que desee (probablemente IIS APPPOOL\[your app pool]).

+0

Esto funciona genial – NibblyPig

+0

Esto no aparece para mí en Windows 7. Ojalá lo hiciera. –

+0

IIRC Hice todo este trabajo bajo Win7. Trabajando en OSX estos días y no tengo un cajero automático Win7 VM práctico o volvería a buscar. ¿No podría haber guardado la clave privada? –

5

que estaba teniendo el mismo problema:

  • WinHttpCertCfg parece haber sido abandonado sin una alternativa razonable.
  • Mi Administrador de certificados no incluía una opción "Administrar claves privadas" como se menciona en this old MSDN blog post.
  • Compilación FindPrivateKey es sobrecarga no razonable en un entorno Windows.

Establecer el permiso para un certificado implica otorgar al grupo de aplicaciones el derecho de lectura en el archivo cert.

Esto se puede lograr usando icacls.exe (la interfaz de usuario de seguridad Explorador de Windows no admite grupos de aplicaciones):

icacls C:\ProgramData\Microsoft\crypto\rsa\machinekeys\9876abcdeblahblahblah /grant "IIS AppPool\AppPoolName:R" 

teclas de Windows máquina almacena en C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys, pero los nombres de los archivos no están relacionados con el certificado. El nombre de archivo para cada certificado se puede obtener utilizando el código de PowerShell:

ls Cert:\LocalMachine\TrustedPeople | 
    select Subject,@{n='FileName';e={$_.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName}} | 
    Format-List 

(Change "TrustedPeople" si su certificado es en otra tienda.)

El nombre del grupo de aplicaciones se puede obtener desde el nodo Grupos de aplicaciones del Administrador de IIS, o mediante la ejecución de este código PowerShell:

Import-Module WebAdministration; ls IIS:\AppPools 

Este script PowerShell 3 utilizará Out-GridView (ogv) como una lista de selección GUI para el CERT y el grupo de aplicación, a continuación, conceder el permiso:

ipmo WebAdministration 
$cert = (ls Cert:\LocalMachine\TrustedPeople | 
    ogv -OutputMode Single -Title "Select Certificate"). 
    PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName 
$app = (ls IIS:\AppPools | 
    ogv -OutputMode Single -Title "Select App Pool").Name 
icacls $env:ProgramData\Microsoft\crypto\rsa\machinekeys\$cert /grant "IIS AppPool\$($app):R" 
+0

Esta es una gran respuesta porque no tiene que usar FindPrivateKey, simplemente PowerShell. Por cierto. Es una pena que una operación tan simple y fundamental como agregar permisos sea tan complicada en Windows. –

1

Si aún desea seguir utilizando wihHttpCertCfg, a continuación, utilice el siguiente comando:

winhttpcertcfg.exe -i <filename> -c <certificateLocation> -a "ComputerName\IIS APPPOOL\AppPoolName" 

Tuve el mismo problema y lo resolví por el comando anterior hoy.

0

Lo que funciona de mí es mi sitio de ensayo está en servicio de la red (grupo de aplicación) (despliegue) y en mi local es "ApplicationPoolIdentity" (copia de trabajo)

acaba de cambiar a ApplicationPoolIdentity y ejecutar el comando WinHttpCertCfg

Cuestiones relacionadas