2009-11-05 13 views
13

Devo consentire l'accesso all'utente IIS a un certificato pfx. Il sito Web è in esecuzione nel Pool di app sotto un utente AppPoolUser. IIS ha automaticamente il nome utente "IIS APPPOOL \ AppPoolUser" e questo è ciò di cui abbiamo bisogno per accedere quando usiamo aspnet_regiis -ga.winhttpcertcfg che concede l'accesso all'utente iiS in Windows 7

Tuttavia, quando utilizzo winhttpcertcfg per concedere l'accesso all'utente "IIS APPPOOL \ AppPoolUser", viene visualizzato il messaggio "Nessuna informazione sull'account trovata".

Il comando che uso è

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

non abbiamo trovato nessun campioni per questo sul web. Qualche idea?

+0

spunta questo http://weblogs.asp.net/hernandl/archive/2005/02/09/WinHttpCertCfgTool.aspx Cordiali saluti, Vivek – Vivek

+0

Ho già provato questo campione. Il mio certificato ha ora accesso a molti utenti. Pool User, amministratore di dominio, tutti ... Sembra che l'appdomain sia in esecuzione in "LocalSystem" e non vedo il modo di dare accesso a questo utente come dice la documentazione, questo è già l'utente con accesso amministratore. – bkhanal

risposta

3

Quando si installa l'applicazione è anche aggiunge la documentazione:

C: \ Program Files (x86) \ Windows Resource Kits \ Tools

Gli esempi che seguono mostrano alcuni dei modi in cui il strumento di configurazione può essere utilizzato.

Questo comando elenca gli account che hanno accesso alla chiave privata per il certificato "MyCertificate" nell'archivio certificati "Root" del ramo LOCAL_MACHINE del registro.

winhttpcertcfg -l -c LOCAL_MACHINE\Root -s MyCertificate 

Questo concede comando accesso alla chiave privata del certificato "MyCertificate" nel "Il mio" archivio certificati per l'account TESTUSER.

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

Questo comando importazioni di un certificato e una chiave privata da un file PFX ed estende l'accesso chiave privata a un altro account.

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

Questo comando rimuove l'accesso alla chiave privata per l'account IWAM_TESTMACHINE con il certificato specificato.

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

-1: copia e incolla dalla documentazione, in particolare quando la documentazione non funziona. –

11

So che è una vecchia questione, ma ho appena avuto lo stesso problema di ieri così ho pensato che avrei risposto.

ho avuto lo stesso problema, ma con un certificato situato nel LocalMachine -> TrustedPeople negozio ...

devi usare icacls invece di WinHttpCertCfg, tratto da this link.

In sostanza, si dovrebbe assomigliare a questa:

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

Per motivi di completamento, qui come avevo bisogno di fare per accedere al negozio "Persone attendibili". Preso in parte da this link.

  1. Utilizzare il FindPrivateKey tool da Microsoft per individuare il file vero e proprio per il CERT nel negozio. Questo strumento deve essere compilato dal codice sorgente in .\WF_WCF_Samples\WCF\Setup\FindPrivateKey\CS dal download 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. Usa icacls sul file data dal FindPrivateKey.

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

Voilà!

+0

Hai salvato il mio equilibrio mentale. Questo vale esattamente un upvote. –

+0

Dopo aver usato ICACLS per assegnare il file pfx al pool di app, cosa devo inserire nel clientCredentials del mio web.config? –

6

Per il post originale, è sufficiente sostituire il dominio "IIS APPPool" con il nome di dominio locale della macchina, in genere lo stesso nome della macchina. Quando WinHttpCertCfg corre, si trasformerà <MachineName> \ <AppPoolUser> in < IIS AppPool > \ <AppPoolUser> "e concedere l'accesso al certficate. Se si desidera lavorare su un desktop dev con IIS locale, questo dovrebbe risolvere il problema. ICACLS funziona solo sui server (che sarà in ultima analisi, sarà la distribuzione su).

+0

+1 In effetti, questo ha funzionato per me: 'winhttpcertcfg.exe -g -c LOCAL_MACHINE \ My -s MyCertName -a" MYMACHINENAME \ Nome del pool di app "' –

+0

localhost funziona anche al posto del nome del computer specifico se si desidera uno script è più facile da eseguire su più server – explunit

+0

FWIW, avevo bisogno di includere sia il nome della macchina e IIS AppPool, ad esempio: 'winhttpcertcfg.exe -g -c LOCAL_MACHINE \ My -s MyCertName -a" MYMACHINENAME \ IIS AppPool \ AppPoolUser "' –

6

si può anche fare questo dal snap-in mmc certificati.

Basta fare clic con il certificato in questione, scegliere All Tasks -> Manage private keys..., e aggiungere l'utente desiderato (probabilmente IIS APPPOOL\[your app pool]).

+0

Funziona alla grande – NibblyPig

+0

Questo non appare per me in Windows 7. Vorrei farlo. –

+0

IIRC Ho fatto tutto questo lavoro con Win7. Lavorare su OSX in questi giorni e non avere un bancomat a portata di mano VM Win7 o vorrei guardare di nuovo. Potresti non aver salvato la chiave privata? –

5

ho avuto lo stesso problema:

  • WinHttpCertCfg sembra essere stata abbandonata senza un'alternativa ragionevole.
  • My Certificate Manager non ha incluso un'opzione "Gestisci chiavi private" come indicato in this old MSDN blog post.
  • La compilazione di FindPrivateKey è un sovraccarico irragionevole in un ambiente Windows.

L'impostazione dell'autorizzazione per un certificato comporta la concessione al pool di applicazioni del diritto di lettura del file cert.

Ciò può essere ottenuto utilizzando icacls.exe (l'interfaccia utente di protezione di Windows Explorer non supporta pool di applicazioni):

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

chiavi negozi macchina Windows in C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys, ma i nomi dei file non sono legati alla certificato. Il nome del file per ogni certificato può essere ottenuto utilizzando questo codice PowerShell:

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

(Change "TrustedPeople" se il CERT è in un altro negozio.)

Il nome del pool di applicazioni può essere ottenuto dal nodo Pool di applicazioni di Gestione IIS o eseguendo questo codice PowerShell:

Import-Module WebAdministration; ls IIS:\AppPools 

Questo script PowerShell 3 userà Out-GridView (OGV) come un elenco GUI per il CERT e la piscina app, quindi concedere l'autorizzazione:

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

Questa è un'ottima risposta perché non è necessario utilizzare FindPrivateKey - semplicemente PowerShell. BTW. è un peccato che un tale fondamentale, semplice op come l'aggiunta di permessi sia così complicato in Windows. –

1

Se si vuole ancora continuare a utilizzare wihHttpCertCfg, quindi utilizzare il seguente comando:

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

Ho avuto lo stesso problema e l'ho risolto dal comando sopra oggi.

0

Ciò che funziona da me è il mio sito di staging è in servizio di rete (piscina app) (distribuzione) e nel mio locale è "ApplicationPoolIdentity" (copia di lavoro)

basta cambiare a ApplicationPoolIdentity ed eseguire il comando di winhttpcertcfg