Question

Nous disposons d'une application basée sur un navigateur dans laquelle nous voulons que l'utilisateur se réauthentifie lorsqu'il le saisit. Ainsi, lorsqu’ils accèdent à cette URL, nous souhaitons qu’on leur présente l’invite de code confidentiel afin qu’ils aient à s’authentifier à nouveau. Y a-t-il un moyen raisonnable de le faire?

Infos complémentaires: il s’agit d’une carte CAC et les postes de travail ont ActivIdentity et Tumbleweed sur eux. De plus, je pourrais ajouter un service aux postes de travail si nécessaire. Les navigateurs sont tous IE7. Le serveur Web est IIS 6 et les pages sont écrites en ASP.NET (principalement).

Était-ce utile?

La solution

Plusieurs logiciels sont impliqués ici.

La première est la carte elle-même. Pour effectuer une signature numérique, le CAC doit être dans un fichier "vérifié". état, ce qui signifie qu'un code PIN a été entré après l'insertion de la carte. De plus, chaque clé de la carte est dotée d'un drapeau indiquant si le code PIN doit être saisi à chaque utilisation de la clé. Je n'ai pas vérifié, mais je pense que ceci est défini pour le "courrier électronique". paire de clés sur un CAC. Par conséquent, vous devez rechercher les clés portant cette option " toujours vérifier " jeu d’indicateurs et configurez le validateur de chemin sur le service pour accepter uniquement ces clés. Vous pourrez peut-être exiger un OID particulier dans l'utilisation de la clé étendue ou exclure certains certificats intermédiaires du DoD de la création du chemin (en les marquant comme révoqués, peut-être).

Le middleware de la machine qui parle avec la carte peut également mettre le code PIN en cache et le fournir à la carte chaque fois que la carte indique qu’elle nécessite un code PIN avant de pouvoir effectuer une opération. Je pense qu'ActivClient utilisait cette fonctionnalité avec la fonctionnalité de mise en cache des codes confidentiels de la version 6, mais dans la version 7, cette option semble avoir disparu. Je n'ai rien trouvé de tel dans le support PIV intégré de Windows. Ce " fonctionnalité " pourrait compromettre la sécurité, donc je suppose que cela a été délibérément supprimé et qu'il n'y aurait pas de piratage du registre ou autrement pour restaurer le comportement. C'est quelque chose que vous n'auriez pas le contrôle, à moins de gérer les ordinateurs des utilisateurs. vous ne pouvez utiliser aucun en-tête HTTP ou option TLS pour appliquer la saisie du code PIN. Mais avec les nouveaux systèmes, cela ne devrait pas être un problème.

Du côté serveur, une poignée de main complète doit avoir lieu afin de permettre au client de s’authentifier. L'authentification du client ne se produira pas s'il existe une session TLS valide. Vous devez donc trouver un moyen d'invalider la session TLS (pas la session d'application, qui est probablement liée à un cookie HTTP) avant de demander l'authentification, ou diriger la demande d'authentification vers une autre interface sur laquelle les sessions ne sont pas activées.

Autres conseils

Il existe deux méthodes d'authentification du client de carte à puce sur le Web: les plug-ins standard TLS / SSL et les plug-ins personnalisés pour le navigateur. Je suppose que vous parlez des navigateurs Web standard (IE / FF / Safari) et de l’authentification SSL.

Les invites de code confidentiel comptent pour deux choses:

  • Session SSL et cache de session SSL de le navigateur
  • état d'authentification sur carte de la clé privée associée
  • la manière dont le middleware est implémenté.

En fin de compte, du point de vue de la sécurité, c’est la carte qui sait quand "demander" # 8221; un code confidentiel - certaines cartes et clés nécessitent un code confidentiel pour chaque opération effectuée avec la clé; certaines cartes permettent d’obtenir un code confidentiel une fois et de laisser les clés authentifiées jusqu’à ce qu’elles soient supprimées du lecteur ou réinitialisées par une application.

Si la session dans la mémoire cache du navigateur ne peut pas être réutilisée ou lorsque la connexion est en cours d'établissement, le middleware pour carte à puce (PKCS # 11 sous Linux, module CryptoAPI / BaseCSP sous Windows ou Tokend sous OSX) doit être mis en discussion. aux clés de la carte. Si l'état d'authentification sur la carte nécessite la saisie d'un code PIN, un rappel est généralement déclenché par le navigateur. Ou si le middleware sait qu'il aura besoin du code PIN, il le demandera avant de parler à la carte.

Il n’existe pas de relation 1: 1 entre la saisie d’un code PIN et la ré-authentification des droits d’accès à la clé privée et la ré-authentification de la session SSL.

Avec le protocole SSL standard, vous dépendez de la manière dont le protocole SSL est implémenté dans les navigateurs et vous ne pouvez pas vous authentifier à nouveau "authentifiez-vous en entrant un code PIN". côté client.

Si vous utilisez Linux, alors avec OpenSC (qui permet à autant que je sache, AFAIK peut utiliser des cartes CAC), vous pouvez définir l'option "transaction_reset". dans opensc.conf à true, la carte est réinitialisée après chaque transaction (chaque négociation de session SSL). Vous pouvez ainsi être sûr que, chaque fois que vous ouvrez une nouvelle session SSL, vous devez entrer à nouveau le code PIN. Il s’agit d’une configuration côté client et non d’une fonctionnalité lancée par le serveur.

Vous pouvez utiliser la fonction javascript pour faire en sorte que navigateur oublie le cache SSL existant sur quelques navigateurs:

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

Vous pouvez utiliser la méthode Javascript setTimeout pour appeler la fonction de déconnexion ci-dessus et éventuellement les rediriger vers la page logout.aspx afin de forcer le client à entrer un nouveau code PIN.

Mais il utilise JavaScript et le code dépend du navigateur et ne fonctionne pas avec tous les navigateurs.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top