12

Background:Browser non sta spingendo per un certificato client

sto aggiornando un'applicazione interna ad un processo di autenticazione in due fasi. Voglio aggiungere un processo di autenticazione del certificato client (tramite una smart card) sopra un modulo di username/password tradizionale. L'applicazione è scritta in C#, ospitata su IIS7 e destinata a Chrome e IE8.

Problema:

sto avendo problemi con ottenere l'applicazione per richiedere all'utente un certificato client. Ho eseguito il debug dell'applicazione con l'aiuto di Fiddler. Quando ho un certificato client di prova salvato nella directory dell'utente di Fiddler (C: \ Documents and Settings \ USER \ My Documents \ Fiddler2), l'applicazione funziona come previsto. Viene richiesto un numero PIN che protegge la smart card e, se inserito correttamente, mi porta al modulo di accesso. Quando chiudo Fiddler, l'applicazione genera invece un errore Proibito 403 (poiché Fiddler non è più in esecuzione e punta al suo certificato). Quello che non sono stato in grado di capire è il motivo per cui l'applicazione non richiede normalmente un certificato.

Configurazione del server attuale:

  • certificato autofirmato è stato creato
  • 443 rilegatura sta puntando a self certificato firmato
  • autenticazione anonima è abilitata
  • Il Sé certificato firmato è stato aggiunto ad entrambi la CA radice affidabile e la CA intermedia (ho letto che un'altra persona l'ha avuta in entrambi e non solo nella CA radice affidabile e che ha risolto il problema, anche se nessuna delle due ha funzionato per noi).
  • Ho eliminato il resto dei certificati nella CA radice affidabile di cui non avevo bisogno (ho letto altrove che avere troppi certificati causerebbe l'inibizione di SSL).

Non ho idee da provare se non partire da zero su un altro server. Qualcuno sa quale potrebbe essere il problema? Sembra che dovrebbe essere abbastanza semplice e che mi manca qualcosa di minore. Tutte le idee sono benvenute.

Aggiornamento:

Dopo aver trascorso più tempo con questo problema di oggi, credo fermamente che ha a che fare con IIS7 non essere configurato correttamente (non mi ha installato in origine). Questo perché ho abilitato Traccia richieste non riuscite, guardato i successivi file .xml generati e visto che veniva lanciato un errore 500.

Chrome lancia un messaggio "Accesso alla pagina Web negato" anziché "403 - Accesso negato: accesso negato". Non so se questo aiuta. So che quando non faccio i certificati richiesti, il sito funzionerà come previsto. Richiedere un certificato è dove fallisce.

Il pool di applicazioni è impostato su .Net 4.0 | Classico | Servizio di rete.

+0

Non sono sicuro di poter aiutare ma ho un paio di domande: 1) hai provato anche IE o FF? 2) Potrebbe voler duplicare i risultati su un altro server. Ho visto troppe problematiche aiutate/risolte in questo modo: ti darebbe anche l'opportunità di diventare più grintoso su come il tuo sito IIS7 è stato configurato; 3) c'è più client e/o logging del server puoi provare ad ottenere più informazioni - probabilmente più sul lato IIS7, a quanto pare. – Lizz

risposta

7

Il tuo problema è che il browser non riceve la richiesta di fornire un certificato client o che esiste un'opzione correlata alla sicurezza per impedire che accada. IE offre il certificato solo se il sito Web si trova nella zona corretta (intranet o siti attendibili). Si prega di controllare questo prima di tutto.

Se ciò non aiuta, vedere questo answer per il passaggio successivo. La documentazione netsh dice:

clientcertnegotiation 
Optional. Specifies whether the negotiation of certificate is enabled or disabled. Default is disabled. 

attivare tale e anche il browser più stupido dovrebbe notare che si suppone di offrire certificato per l'autenticazione. Per diagnosticare ulteriormente il problema, è possibile utilizzare WireShark per visualizzare la negoziazione in corso.

+0

Non riesco a revocarlo abbastanza. Dopo giorni di risoluzione dei problemi, risulta che il nostro cliente non ha inserito il nostro sito nella zona attendibile. Grazie per aver spiegato questo e per avermi salvato molti altri giorni. –

4

Provare openssl s_client -connect yourip:443 -prexit E verificare se la CA (il proprio certificato autofirmato) viene inviata al client nei nomi CA del certificato del client accettabile.

è necessario installare OpenSSL in primo luogo se non lo avete

+0

Sto riscontrando il problema simile, quindi ho provato 'openssl s_client -connect yourip: 443 -prexit' e vedo qualche errore msg' CONNECTED (00000104) scrivi: errno = 10054 --- nessun certificato peer disponibile' anche se Ho configurato il certificato SSL valido su *: 443 su IIS. – RanPaul

+0

@RanPaul So che è molto tardi, ma se sei su una macchina Windows, tieni presente che OpenSSL non riconosce l'archivio certificati di Windows. Quindi è necessario fornire un '-CApath' o' -CAfile'. Scaricalo [file .PEM di Mozilla] (https://curl.haxx.se/docs/caextract.html) o creane uno personalizzato dalla catena necessaria. Assicurati di installare anche la [versione più recente di OpenSSL] (https://slproweb.com/products/Win32OpenSSL.html). –

3

in tutti i browser che ho visto, il browser non richiede di selezionare un certificato, se non ha i certificati firmati da una CA il server si fida. Quindi assicurati che il tuo server sia configurato con le CA corrette. Come suggerito da Boklucius, è possibile utilizzare openssl per esaminare l'elenco delle CA attendibili che il server sta inviando ai client e verificare se la CA con cui sono stati firmati i certificati client sia tra questi.

1

Per aggiungere una lezione piuttosto doloroso per il mix: Assicurarsi che si esce da Skype (o qualsiasi altra applicazione) che mangia la porta 443.

Quindi l'idea qui è se si esegue un ambiente dev sulla stessa macchina (sia client che IIS) e il tuo team utilizza Skype o altre app per comunicare.

Guarda le ore passano mentre provi a eseguire il debug di questo problema, apparentemente facendo tutto "giusto", netsh http sslcerts e così, anche il riavvio, ma senza alcun risultato. Beh, risulta che Skype mangerà 443, quindi spegnilo e "spione" ci sarà il prompt del certificato.

Quindi sentitevi liberi di gettare le cose al muro, urlare oscenità o semplicemente "rabbia, rabbia contro il morire della luce".

0

Inoltre, assicurarsi che Fiddler non interferisca. Se lo decifri, decodificherà il messaggio in IE e non avrà il certificato installato, quindi non potrà offrirlo. Disattiva il violinista e voilà appare la richiesta del certificato.

Problemi correlati