2009-11-25 15 views
9

Abbiamo un'applicazione basata su browser in cui vogliamo rendere l'utente autenticato quando lo inserisce. Quindi, quando accedono a quell'URL, vogliamo che vengano presentati con il prompt PIN in modo che debbano riautenticare. C'è un modo ragionevole per farlo?CAC Smartcard Reauthenticate

Informazioni aggiunte: Questo è per una scheda CAC e le workstation hanno ActivIdentity e Tumbleweed su di esse. Inoltre, potrei aggiungere un servizio alle workstation se necessario. I browser sono tutti IE7. Il server Web è IIS 6 e le pagine sono scritte in ASP.NET (principalmente).

+0

Si prega di condividere come questo problema è stato risolto. :) –

+1

@Kevin Ho respinto il requisito spiegando al cliente che il timeout del pin sulla scheda CAC è completamente indipendente dal browser. Dal punto di vista della sicurezza non è una buona idea cercare di interferire con il normale funzionamento. La loro persona di sicurezza ha convenuto che non era necessario che il cliente reinserisse il pin ogni volta; un approccio migliore è quello di rientrare solo se è scaduto. – adg

risposta

10

Qui ci sono alcuni diversi software coinvolti.

Il primo è la carta stessa. Per eseguire una firma digitale, il CAC deve essere in uno stato "verificato", cioè un PIN è stato inserito dopo che la carta è stata inserita. Oltre a ciò, ogni tasto della carta ha un indicatore che indica se il PIN deve essere inserito ogni volta che si utilizza la chiave. Non ho controllato, ma penso che sia impostato per la coppia di chiavi "email" su un CAC. Pertanto, è necessario trovare le chiavi che hanno questo flag "sempre verificato" e configurare il validatore del percorso sul servizio per accettare solo quelle chiavi. Potrebbe essere necessario richiedere un OID particolare nell'utilizzo esteso delle chiavi o escludere alcuni dei certificati intermedi DoD dalla creazione del percorso (contrassegnandoli come revocati, forse).

Il middleware sulla macchina che comunica con la scheda può anche memorizzare il PIN nella cache e fornirlo alla scheda ogni volta che la carta indica che richiede un PIN prima di completare un'operazione. Penso che ActivClient stia facendo questo con la sua funzionalità di memorizzazione nella cache del PIN attraverso la versione 6, ma nella versione 7, questa opzione sembra essere scomparsa. Non ho trovato nulla di simile nel supporto PIV integrato di Windows. Questa "caratteristica" potrebbe compromettere la sicurezza, quindi la mia ipotesi è che sia stata deliberatamente rimossa e che non ci sarebbero stati hack di registro o altro per ripristinare il comportamento. Questo è qualcosa su cui non avresti il ​​controllo, a meno che tu non gestisca le macchine degli utenti; non è disponibile l'intestazione HTTP o l'opzione TLS che è possibile utilizzare per applicare la voce PIN. Ma, con i nuovi sistemi, non dovrebbe essere un problema.

Sul lato server, è necessario eseguire un handshake completo per consentire al client di eseguire l'autenticazione. L'autenticazione del client non avverrà se c'è una sessione TLS valida. Quindi è necessario trovare un modo per invalidare la sessione TLS (non la sessione dell'applicazione, che è probabilmente legata a un cookie HTTP) prima di richiedere l'autenticazione, o indirizzare la richiesta di autenticazione a un'altra interfaccia che non ha sessioni abilitate.

+0

Grazie sylvarking, penso di capire quello che stai dicendo. Ho molto controllo sui server e sulle workstation (poche centinaia di essi) quindi forse potrei fare qualcosa nel browser che richiederebbe alla smart card di richiedere un PIN? – adg

+0

Esatto. Se si amministrano le workstation, potrebbe essere possibile configurare tutto il software del lettore di schede per richiedere più spesso il PIN. Ad esempio, ho usato ActivClient come software del lettore di schede. È ciò che in effetti apre la finestra di dialogo per richiedere il PIN, e c'è un'impostazione per controllare la frequenza con cui un utente deve reinserirla. – erickson

+1

Mi sento fortunato ad aver trovato qualcuno con ActivIdentity Experience. La tua risposta mi ha spinto a guardare il servizio di memorizzazione nella cache PIN, che non avevo mai visto prima. Posso vedere 12 proprietà e una di queste è chiamata "Abilita memorizzazione nella cache PIN". Ho intenzione di provare a disattivarlo. – adg

6

Esistono due modi per eseguire l'autenticazione del client smartcard sul Web: standard TLS/SSL o plug-in personalizzati per il browser. Presumo che tu stia parlando di browser web standard (IE/FF/Safari) e autenticazione SSL.

Ci sono due cose che contano per il PIN istruzioni visualizzate:

  • sessione SSL e SSL cache di sessione del browser
  • on-card stato di autenticazione della relativa chiave
  • il modo middleware privato implementato.

Alla fine, dal punto di vista della sicurezza, è la carta che sa quando a "chiedere” un PIN - alcune schede e chiavi richiedono un PIN per ogni operazione con la chiave, alcune carte sono OK per ottenere una PIN una volta e lascia le chiavi in ​​stato di autenticazione fino a quando non viene rimosso dal lettore o ripristinato da un'applicazione.

Se la sessione nella cache del browser non può essere riutilizzata o quando viene stabilita la connessione, il middleware smart card (PKCS # 11 su Linux, modulo CryptoAPI/BaseCSP su Windows o Tokend su OSX) deve parla con i tasti sulla carta. Se lo stato di autenticazione sulla scheda richiede l'inserimento di un PIN, in genere il callback viene attivato dal browser. O se il middleware sa che avrà bisogno del PIN, lo chiederà prima di parlare con la carta.

Non esiste una relazione 1: 1 tra l'immissione di un PIN e la re-autenticazione dei diritti di accesso alla chiave privata e la riautenticazione della sessione SSL.

Con SSL standard, si dipende dal modo in cui SSL è implementato nei browser e non si può avere un affidabile "re-autenticazione al 100%" inserendo il PIN sul lato client.

Se si utilizza Linux, quindi con OpenSC (che, AFAIK può utilizzare schede CAC) è possibile impostare "transaction_reset" in opensc.conf su true, il che comporta il ripristino della scheda dopo ogni transazione (ogni negoziazione di sessione SSL) e in questo modo si può essere sicuri che ogni volta che si apre una nuova sessione SSL, l'utente deve inserire nuovamente il PIN. Questa è una configurazione lato client, tuttavia non una funzione avviata dal server.

+0

Grazie martin per l'eccellente commento.Vedo che avrei dovuto fornire più informazioni ma sono ancora molto ignorante su ciò che è significativo in questa situazione. Le workstation hanno un middleware chiamato ActivIdentity o ActivClient. Il processo è denominato accoca.exe. Stanno anche correndo Tumbleweed. – adg

+0

Inoltre, ricevo dal tuo commento che la mia sfida è in qualche modo convincere la carta che è necessario chiedere nuovamente un PIN. Non ho ancora capito come funziona il middleware, ma sarebbe ragionevole dire che quando l'utente accede a un URL, potrei inserire qualcosa nella pagina web che indurrebbe il CAC a decidere che è necessario chiedere un PIN? Forse potrei uccidere la sessione SSL? (Scusa se è un'idea stupida, sono un po 'confuso). – adg

+0

Quando cancello lo stato SSL (usando IE7-Tools-Opzioni Internet-Contenuto-Cancella stato SSL, mi viene richiesto il certificato ma non il PIN. Se scelgo il certificato corretto funziona, se seleziono il certificato errato, fallisce, quindi perché dovrebbe richiedere di nuovo il CERT, se non chiederà il PIN? Non capisco! – adg

0

È possibile utilizzare la funzione javascript del browser per fare dimenticare la cache SSL esistente su alcuni browser:

function logout() { 
    // clear browser authentication cache 
    // IE specific 
    try 
    { 
     document.execCommand("ClearAuthenticationCache", "false"); 
    } 
    catch(e) 
    { 
     // do nothing 
    } 

    // clear for firefox or any browser that supports window.crypto API 
    if (window.crypto && typeof window.crypto.logout === "function") { 
     window.crypto.logout(); 
    } 
} 

È possibile utilizzare il metodo JavaScript setTimeout chiamare sopra la funzione di logout ed eventualmente riorientare alla logout.aspx pagina per forza il client per inserire il nuovo PIN.

Ma utilizza JavaScript e il codice dipende dal browser e non funziona per tutti i browser.

Problemi correlati