2012-03-21 9 views
8

Sto sviluppando un'applicazione Web ASP.NET 4.0 e desidero leggere i certificati utente correnti da X509Store. Leggere i certificati di LocalMachine funziona bene, ma se imposto StoreLocation su CurrentUser, mi dà una collezione vuota.Impossibile leggere i certificati CurrentUser da X509Store

Il seguente codice funziona bene:

X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine); // StoreLocation.CurrentUser 
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly); 

ho controllato il mio archivio personale (via certmgr.mmc) e sono sicuro che ho i certificati.

Cosa mi manca? (store.Certificates è vuoto)

+0

L'applicazione è in esecuzione come te? –

+0

L'applicazione è ospitata sul mio IIS locale (7.5). Il pool di applicazioni è impostato su ApplicationPoolIdentity. –

+1

... allora CurrentUser sarà il pool di applicazioni, non tu. –

risposta

2

Sembra che non sia possibile accedere all'archivio certificati personali tramite l'applicazione Web, indipendentemente dall'identità del pool di applicazioni che si sta utilizzando.

Ha senso, un'applicazione web non ha accesso a quella posizione. :)

La mia soluzione:

ho sviluppato un controllo ActiveX, che penso che sia l'unico modo per accedere al negozio. (Inoltre, un'applet Java offre la stessa funzionalità). Uso il controllo ActiveX tramite JavaScript per accedere allo Store e inviare tali informazioni al server.

0

Se il processo di lavoro non può accedere a Cert Store, forse è solo un problema di impostazione dell'account. Prova ad accedere a Configurazione IIS, apri ApplicationPools, fai clic destro sul tuo, seleziona Avanzate e prova a caricare LoadUserProfile su TRUE. E riavvia la piscina. Funziona per me - non più eccezioni durante il caricamento di .PFX con chiavi private.

0

Ho avuto un problema simile. La soluzione era:

admin IIS -> [la tua directory virtuale] -> Autenticazione-> Autenticazione anonima (selezionare quindi fare clic su "Modifica ...") e modificarlo per utilizzare "Identità del pool di applicazioni".

Altrimenti potrebbe essere in esecuzione come "IUSR" generico