Domanda

Abbiamo un'applicazione basata su browser in cui vogliamo riautenticare l'utente quando lo accede. Pertanto, quando accedono a tale URL, vogliamo che gli venga presentato il prompt PIN, in modo che debbano riautenticare. C'è un modo ragionevole per farlo?

Informazioni aggiunte: si tratta di 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 web server è IIS 6 e le pagine sono scritte in ASP.NET (principalmente).

È stato utile?

Soluzione

Ci sono alcuni diversi software coinvolti qui.

Il primo è la carta stessa. Per eseguire una firma digitale, il CAC deve trovarsi in una "verifica" " stato, ovvero un PIN inserito dopo l'inserimento della carta. Oltre a ciò, ogni chiave sulla carta ha un flag che indica se il PIN deve essere inserito ogni volta che la chiave viene utilizzata. Non ho controllato, ma penso che sia impostato per " email " coppia di chiavi su un CAC. Pertanto, dovresti trovare quali chiavi hanno questo " verifica sempre " flag impostato e configurare il validatore di percorso sul servizio per accettare solo quelle chiavi. Potresti essere in grado di richiedere un OID particolare nell'uso esteso della chiave o di escludere alcuni dei certificati intermedi DoD dalla creazione del percorso (contrassegnandoli come revocati, forse).

Il middleware sulla macchina che comunica con la scheda potrebbe anche memorizzare nella cache il PIN e fornirlo alla scheda ogni volta che la scheda indica che richiede un PIN prima di completare un'operazione. Penso che ActivClient lo stesse facendo con la sua funzione di memorizzazione nella cache del PIN fino alla versione 6, ma nella versione 7 questa opzione sembra essere scomparsa. Non ho trovato nulla del genere nel supporto PIV integrato di Windows. Questa "funzione" potrebbe compromettere la sicurezza, quindi la mia ipotesi è che sia stata deliberatamente rimossa e non ci sarebbero stati hack del registro o altrimenti per ripristinare il comportamento. Questo è qualcosa su cui non avresti il ??controllo, a meno che tu non gestisca le macchine degli utenti; non esiste un'intestazione HTTP o un'opzione TLS che è possibile utilizzare per imporre l'immissione del PIN. Ma, con i sistemi più recenti, non dovrebbe essere un problema.

Sul lato server, deve essere eseguita una stretta di mano completa per consentire al client di eseguire l'autenticazione. L'autenticazione client non avverrà se è presente una sessione TLS valida. Quindi dovresti 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.

Altri suggerimenti

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

Esistono due aspetti importanti per i prompt PIN:

  • Sessione SSL e cache sessione SSL di il browser
  • stato di autenticazione su scheda della chiave privata correlata
  • il modo in cui viene implementato il middleware.

Alla fine, dal punto di vista della sicurezza, è la carta che sa quando " chiedere & # 8221; un PIN: alcune carte e chiavi richiedono un PIN per ogni operazione con la chiave, alcune carte sono OK per ottenere un PIN una volta e lasciare le chiavi in ??stato autenticato 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 per smart card (PKCS # 11 su Linux, modulo CryptoAPI / BaseCSP su Windows o Tokend su OSX) deve parlare ai tasti sulla carta. Se lo stato di autenticazione sulla scheda richiede l'inserimento di un PIN, il browser in genere attiva una richiamata. O se il middleware sa che avrà bisogno del PIN, lo chiederà prima di parlare con la scheda.

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

Con SSL standard, dipendi dal modo in cui SSL è implementato nei browser e non puoi avere un "autenticazione" affidabile al 100% inserendo il PIN " sul lato client.

Se stai usando Linux, allora con OpenSC (che, AFAIK può usare le carte CAC) puoi impostare " transazione_risposta " in opensc.conf su true, il che comporta il ripristino della scheda dopo ogni transazione (ogni negoziazione della 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, non una funzione avviata dal server.

Puoi usare la funzione javascript per far dimenticare al browser 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 per chiamare la funzione di disconnessione sopra riportata e possibilmente reindirizzarli alla pagina logout.aspx per forzare il client a immettere un nuovo PIN.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top