Frage

Wir haben eine Browser-basierte Anwendung, wo wir den Benutzer erneut authentifizieren machen wollen, wenn sie es betreten. Also, wenn sie diese URL zugreifen wir wollen, dass sie mit der PIN-Prompt werden, so müssen sie erneut authentifizieren. Gibt es eine vernünftige Art und Weise, das zu tun?

Hinzugefügt Info: Dies ist eine CAC-Karte und die Arbeitsplätze haben Activ und Tumbleweed auf ihnen. Auch konnte ich einen Dienst an die Arbeitsplätze bei Bedarf hinzuzufügen. Der Browser sind alle IE7. Der Web-Server ist IIS 6 und die Seiten in ASP.NET (meistens) geschrieben.

War es hilfreich?

Lösung

Es gibt ein paar verschiedenen Teile der Software hier beteiligt.

Zuerst ist die Karte selbst. Um die digitale Signatur durchzuführen, hat die CAC in einem „verified“ Zustand sein, was bedeutet, ein PIN-Nummer eingegeben wurde, nachdem die Karte eingeführt wurde. Darüber hinaus hat jede Taste auf der Karte einen Flag, das, ob die PIN verwendet wird, jedesmal, wenn der Schlüssel eingegeben werden muss, zeigt. Ich habe nicht überprüft, aber ich denke, das ist für das „E-Mail“ Schlüsselpaar auf einem CAC eingestellt ist. So müssten Sie auf, welche Tasten haben diese „immer überprüfen Flag“ gesetzt, und konfigurieren Sie den Pfad Validator auf den Dienst zu übernehmen nur die Schlüssel finden. Sie könnten eine bestimmte OID in erweiterten Schlüsselverwendung verlangen können, oder einige der DoD Zwischenzertifikate von Weger auszuschließen sind (das Markieren von ihnen als widerrufen, vielleicht).

Die Middleware auf der Maschine auf die Karte sprechen könnte auch die PIN-Cache und es auf die Karte zur Verfügung stellen, wenn die Karte zeigt an, dass es vor einer PIN erforderlich ist, bevor sie eine Operation abgeschlossen werden. Ich denke, dass Activclient tat dies mit seiner PIN-Caching-Funktion durch Version 6, aber in der Version 7, scheint diese Option fehlt gegangen zu sein. Ich habe nicht so etwas wie das in Windows integrierte in PIV Unterstützung gefunden. Dieses „Feature“ könnte die Sicherheit gefährden, so meine Vermutung ist, dass es absichtlich entfernt wurde, und es gäbe keine Registry-Hacks oder auf andere Weise das Verhalten wiederherzustellen. Das ist etwas, würden Sie nicht die Kontrolle über haben, es sei denn, Sie die Maschinen der Benutzer verwalten; es gibt keine HTTP-Header oder TLS-Option, die Sie verwenden können, PIN-Eingabe zu erzwingen. Aber mit neueren Systemen, es sollte kein Problem sein.

Auf der Serverseite eine vollständige Handshake muss, um das Auftreten des Client die Authentifizierung zu machen. Client-Authentifizierung wird nicht passieren, wenn eine gültige TLS-Sitzung ist. So müssen Sie einen Weg finden, die TLS-Sitzung (nicht die Anwendungssitzung, die wahrscheinlich zu einem HTTP-Cookie gebunden ist) ungültig zu machen, bevor die Authentifizierung anfordert, oder direkt die Authentifizierungsanforderung an einem anderen Schnittstelle, die nicht-Sitzungen nicht aktiviert ist.

Andere Tipps

Es gibt zwei Möglichkeiten der Smartcard-Client-Authentifizierung auf dem Web zu tun: Standard TLS / SSL oder benutzerdefinierter Plug-in für den Browser. Ich nehme an, Sie sprechen über Standard-Web-Browser (IE / FF / Safari) und SSL-Authentifizierung.

Es gibt zwei Dinge, die für PIN egal Aufforderungen:

  • SSL-Sitzung und SSL-Sitzung Cache der Browser
  • on-Card-Authentifizierung Zustand des zugehörigen privaten Schlüssels
  • die Art und Weise Middleware implementiert.

Am Ende von Sicherheitsperspektive ist es die Karte, die weiß, wann man „fragen Sie nach“ einer PIN - einige Karten und Schlüssel erfordern eine PIN für jede Operation mit dem Schlüssel, sind einige Karten OK, um eine PIN einmal zu bekommen und lassen sie die Tasten in authentifizierten Zustand, bis es vom Leser oder zurückgesetzt von einer Anwendung entfernt wird.

Wenn die Sitzung im Cache des Browsers nicht wiederverwendet werden kann, oder wenn die Verbindung hergestellt wird, Smartcard-Middleware (PKCS # 11 auf Linux, CryptoAPI / BaseCSP Modul unter Windows oder Tokend auf OSX) muss reden auf die Tasten auf der Karte. Wenn der Authentifizierungszustand auf der Karte eine PIN erforderlich eingegeben wird, wird ein Rückruf in der Regel durch den Browser ausgelöst. Oder wenn die Middleware weiß, dass es die PIN benötigt, es wird sich fragen, bevor auf die Karte zu sprechen.

Es gibt keine. 1: 1-Beziehung zwischen Eingabe einer PIN und tatsächlich eine erneute Authentifizierung Zugriffsrechte auf den privaten Schlüssel und eine erneute Authentifizierung der SSL-Sitzung

Mit Standard-SSL, hängen Sie auf dem Weg SSL wird in Browsern implementiert und können nicht ein 100% zuverlässig „erneut authentifizieren durch PIN-Eingabe“ auf der Client-Seite.

Wenn Sie Linux verwenden, dann mit OpenSC (was AFAIK CAC-Karten verwenden kann), können Sie „transaction_reset“ in opensc.conf auf true gesetzt, die nach jeder Transaktion in der Karte zurückgesetzt führt (jede SSL-Sitzung Verhandlung) und auf diese Weise können Sie sicher sein, dass, wenn Sie eine neue SSL-Sitzung öffnen, Benutzer die PIN erneut eingeben muss. Dies ist eine Client-Seite Konfiguration aber kein Server-initiierte Funktion.

können Sie JavaScript-Funktion verwenden, um Browser, um den bestehenden SSL-Cache auf wenigen Browsern vergessen:

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();
    }
}

Sie können Javascript SetTimeout Methode oben Logout-Funktion aufrufen und möglicherweise umleiten sie Seite an logout.aspx den Client zu zwingen, neue PIN einzugeben.

Aber es nutzt JavaScript und die Code-Browser abhängig und funktioniert nicht für alle Browser.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top