10 Stimmen

CAC Chipkarte neu authentifizieren

Wir haben eine browserbasierte Anwendung, bei der wir den Benutzer dazu bringen wollen, sich erneut zu authentifizieren, wenn er sie eingibt. Wenn sie also auf die URL zugreifen, soll ihnen die PIN-Eingabeaufforderung angezeigt werden, damit sie sich erneut authentifizieren müssen. Gibt es eine vernünftige Möglichkeit, das zu tun?

Zusätzliche Informationen: Es handelt sich um eine CAC-Karte, und die Arbeitsstationen sind mit ActivIdentity und Tumbleweed ausgestattet. Außerdem könnte ich den Arbeitsplätzen bei Bedarf einen Dienst hinzufügen. Die Browser sind alle IE7. Der Webserver ist IIS 6 und die Seiten sind (größtenteils) in ASP.NET geschrieben.

0 Stimmen

Bitte teilen Sie uns mit, wie dieses Problem gelöst wurde :)

2 Stimmen

@Kevin Ich habe die Anforderung zurückgedrängt, indem ich dem Kunden erklärt habe, dass der Pin-Timeout auf der CAC-Karte völlig unabhängig vom Browser ist. Vom Sicherheitsstandpunkt aus ist es keine gute Idee, in die normale Funktion einzugreifen. Der Sicherheitsexperte des Kunden stimmte zu, dass es nicht notwendig sei, den Pin jedes Mal neu einzugeben; ein besserer Ansatz wäre, ihn nur dann neu einzugeben, wenn er abgelaufen ist.

11voto

erickson Punkte 256579

Hier sind mehrere verschiedene Softwarekomponenten im Spiel.

Der erste ist die Karte selbst. Um eine digitale Unterschrift leisten zu können, muss sich das CAC in einem "verifizierten" Zustand befinden, was bedeutet, dass eine PIN eingegeben wurde, nachdem die Karte eingeführt wurde. Darüber hinaus hat jeder Schlüssel auf der Karte ein Kennzeichen, das angibt, ob die PIN bei jeder Verwendung des Schlüssels eingegeben werden muss. Ich habe es nicht überprüft, aber ich glaube, dass dies für das Schlüsselpaar "E-Mail" auf einem CAC eingestellt ist. Sie müssen also herausfinden, für welche Schlüssel das Flag "always verify" gesetzt ist, und die Pfadüberprüfung des Dienstes so konfigurieren, dass nur diese Schlüssel akzeptiert werden. Möglicherweise können Sie eine bestimmte OID in der erweiterten Schlüsselverwendung verlangen oder einige der DoD-Zwischenzertifikate von der Pfaderstellung ausschließen (indem Sie sie vielleicht als widerrufen kennzeichnen).

Die Middleware auf dem Rechner, der mit der Karte kommuniziert, könnte die PIN auch zwischenspeichern und sie der Karte immer dann zur Verfügung stellen, wenn die Karte anzeigt, dass sie eine PIN benötigt, bevor sie einen Vorgang abschließen kann. Ich glaube, dass ActivClient dies mit seiner PIN-Caching-Funktion bis Version 6 getan hat, aber in Version 7 scheint diese Option nicht mehr vorhanden zu sein. In der integrierten PIV-Unterstützung von Windows habe ich so etwas nicht gefunden. Diese "Funktion" könnte die Sicherheit gefährden, daher vermute ich, dass sie absichtlich entfernt wurde und dass es keine Hacks in der Registrierung oder andere Möglichkeiten gibt, das Verhalten wiederherzustellen. Es gibt keine HTTP-Header- oder TLS-Option, mit der Sie die PIN-Eingabe erzwingen können. Bei neueren Systemen sollte dies jedoch kein Problem darstellen.

Auf der Serverseite muss ein vollständiger Handshake stattfinden, damit der Client eine Authentifizierung durchführen kann. Die Client-Authentifizierung findet nicht statt, wenn es eine gültige TLS-Sitzung gibt. Sie müssen also einen Weg finden, die TLS-Sitzung (nicht die Anwendungssitzung, die wahrscheinlich an ein HTTP-Cookie gebunden ist) vor der Authentifizierungsanforderung ungültig zu machen oder die Authentifizierungsanforderung an eine andere Schnittstelle zu leiten, die keine Sitzungen aktiviert hat.

1 Stimmen

Danke, Sylvarking, ich glaube, ich verstehe, was Sie sagen. Ich habe viel Kontrolle sowohl über die Server als auch über die Workstations (ein paar Hundert davon), also könnte ich vielleicht etwas im Browser machen, das die Smartcard veranlasst, eine PIN zu verlangen?

1 Stimmen

Das ist richtig. Wenn Sie die Arbeitsstationen verwalten, können Sie die gesamte Kartenlesesoftware so konfigurieren, dass die PIN-Abfrage häufiger erfolgt. Ich habe zum Beispiel ActivClient als Kartenlesesoftware verwendet. Damit wird das Dialogfeld zur Abfrage der PIN eingeblendet, und es gibt eine Einstellung, mit der sich steuern lässt, wie oft der Benutzer die PIN erneut eingeben muss.

1 Stimmen

Ich habe das Glück, jemanden mit ActivIdentity Experience gefunden zu haben. Ihre Antwort hat mich dazu veranlasst, mir den PIN Caching Service anzusehen, den ich vorher nicht kannte. Ich kann 12 Eigenschaften sehen und eine davon heißt "Enable PIN Caching". Ich werde versuchen, das zu deaktivieren.

7voto

Martin Paljak Punkte 4039

Es gibt zwei Möglichkeiten der Smartcard-Client-Authentifizierung im Web: Standard-TLS/SSL oder benutzerdefinierte Plugins für den Browser. Ich nehme an, Sie sprechen von Standard-Webbrowsern (IE/FF/Safari) und SSL-Authentifizierung.

Bei der PIN-Eingabeaufforderung sind zwei Dinge wichtig:

  • SSL-Sitzung und SSL-Sitzungscache des des Browsers
  • Authentifizierungsstatus des zugehörigen privaten Schlüssels auf der Karte
  • die Art und Weise, wie Middleware implementiert wird.

Aus der Sicherheitsperspektive ist es letztendlich die Karte, die weiß, wann sie nach einer PIN "fragen" muss - einige Karten und Schlüssel erfordern eine PIN für jede Operation mit dem Schlüssel, bei einigen Karten ist es in Ordnung, einmal eine PIN zu erhalten und die Schlüssel im authentifizierten Zustand zu belassen, bis sie aus dem Lesegerät entfernt oder durch eine Anwendung zurückgesetzt werden.

Wenn die Sitzung im Cache des Browsers nicht wiederverwendet werden kann oder wenn die Verbindung aufgebaut wird, muss die Smartcard-Middleware (PKCS#11 unter Linux, CryptoAPI/BaseCSP-Modul unter Windows oder Tokend unter OSX) mit den Schlüsseln auf der Karte sprechen. Wenn der Authentifizierungsstatus auf der Karte die Eingabe einer PIN erfordert, wird in der Regel ein Rückruf durch den Browser ausgelöst. Oder wenn die Middleware weiß, dass sie die PIN benötigt, fragt sie diese ab, bevor sie mit der Karte spricht.

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

Bei Standard-SSL sind Sie von der Art und Weise abhängig, wie SSL in den Browsern implementiert ist, und können auf der Client-Seite keine 100 % zuverlässige "Neuauthentifizierung durch Eingabe der PIN" vornehmen.

Wenn Sie Linux verwenden, können Sie mit OpenSC (das, AFAIK, CAC-Karten verwenden kann) "transaction_reset" in opensc.conf auf true setzen, was dazu führt, dass die Karte nach jeder Transaktion (jeder SSL-Sitzungsaushandlung) zurückgesetzt wird, und auf diese Weise können Sie sicher sein, dass der Benutzer jedes Mal, wenn Sie eine neue SSL-Sitzung eröffnen, die PIN erneut eingeben muss. Dies ist jedoch eine clientseitige Konfiguration, keine vom Server initiierte Funktion.

0 Stimmen

Vielen Dank, Martin, für diesen ausgezeichneten Kommentar. Ich sehe ein, dass ich mehr Informationen hätte geben sollen, aber ich bin immer noch sehr unwissend, was in dieser Situation sinnvoll ist. Die Workstations haben eine Middleware namens ActivIdentity oder ActivClient. Der Prozess heißt accoca.exe. Außerdem läuft auf ihnen Tumbleweed.

0 Stimmen

Ihrem Kommentar entnehme ich auch, dass ich die Karte irgendwie davon überzeugen muss, dass sie wieder nach einer PIN fragen muss. Ich habe noch nicht herausgefunden, wie die Middleware funktioniert, aber wäre es vernünftig zu sagen, dass, wenn der Benutzer auf eine URL zugreift, ich etwas in die Webseite einfügen könnte, das die CAC dazu veranlasst, zu entscheiden, dass sie nach einer PIN fragen muss? Vielleicht könnte ich die SSL-Sitzung unterbrechen? (Tut mir leid, wenn das eine dumme Idee ist, ich bin ein wenig verwirrt).

0 Stimmen

Wenn ich den SSL-Status lösche (mit IE7-Tools-Internetoptionen-Inhalt-SSL-Status löschen), werde ich zur Eingabe des Zertifikats, aber nicht der PIN aufgefordert. Wenn ich das richtige Zertifikat wähle, funktioniert es, wenn ich das falsche wähle, schlägt es fehl. Warum sollte ich also erneut zur Eingabe des Zertifikats aufgefordert werden, wenn nicht auch die PIN abgefragt wird? Ich verstehe das nicht!

0voto

ISuckAtCoding Punkte 1

Sie können eine Javascript-Funktion verwenden, um den Browser dazu zu bringen, den bestehenden SSL-Cache in einigen Browsern zu 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 die Javascript-Methode setTimeout verwenden, um die obige Logout-Funktion aufzurufen und sie möglicherweise auf die Seite logout.aspx umzuleiten, um den Kunden zur Eingabe einer neuen PIN zu zwingen.

Es verwendet jedoch JavaScript und der Code ist browserabhängig und funktioniert nicht in allen Browsern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X