web-dev-qa-db-fra.com

Balise Keygen en HTML5

Je suis donc tombé sur cette nouvelle balise en HTML5, <keygen>. Je n'arrive pas à comprendre à quoi il sert, comment il est appliqué et comment cela pourrait affecter le comportement du navigateur.

Je comprends que cette balise est destinée au cryptage de formulaires, mais quelle est la différence entre <keygen> et avoir un certificat SSL pour votre domaine. En outre, quel est l'attribut challenge?

Je ne prévois pas de l'utiliser car il est loin d'être implémenté dans une gamme acceptable de navigateurs, mais je suis curieux de savoir exactement ce que fait cette balise. Tout ce que je peux trouver, c'est une documentation vague sur les emporte-pièces sans exemples réels d'utilisation.


Modifier:

J'ai trouvé un document TRÈS informatif, ici . Cela passe par l'implémentation côté client et côté serveur de la balise keygen.

Je suis toujours curieux de savoir quel serait l'avantage de cela sur un certificat SSL de domaine.

75
Craige

SSL concerne "l'identification du serveur" ou "l'authentification du serveur ET du client (authentification mutuelle)".

Dans la plupart des cas, seul le serveur présente son certificat de serveur pendant la négociation SSL afin que vous puissiez vous assurer qu'il s'agit bien du serveur auquel vous vous attendez à vous connecter. Dans certains cas, le serveur souhaite également vérifier que vous est bien la personne que vous prétendez être. Pour cela, vous avez besoin d'un certificat client.

Le <keygen> tag génère une paire de clés publique/privée, puis crée une demande de certificat. Cette demande de certificat sera envoyée à une autorité de certification (CA). L'autorité de certification crée un certificat et le renvoie au navigateur. Vous pouvez maintenant utiliser ce certificat pour l'authentification des utilisateurs.

32
duddex

Vous manquez un peu d'histoire. keygen a d'abord été pris en charge par Netscape alors qu'il s'agissait encore d'un navigateur pertinent. IE, OTOH, a pris en charge les mêmes cas d'utilisation via ses API ActiveX. Opera et WebKit (ou même KHTML), ne voulant pas procéder à la rétro-ingénierie de l’ensemble de l’API Win32, a procédé à la rétro-ingénierie keygen à la place.

Il a été spécifié dans Web Forms 2.0 (qui a maintenant été fusionné dans la spécification HTML), afin d'améliorer l'interopérabilité entre les navigateurs qui l'ont implémenté.

Depuis lors, l'équipe IE a réitéré son refus d'implémenter keygen, et la spécification (afin d'éviter de se transformer en science-fiction sèche) a été modifiée pour ne pas nécessiter de véritable la mise en oeuvre:

Remarque: Cette spécification ne spécifie pas les types de clés que les agents utilisateurs doivent prendre en charge - il est possible qu'un agent utilisateur ne prenne en charge aucun type de clé.

En bref, ce n'est pas un nouvel élément, et à moins que vous ne puissiez ignorer IE, ce n'est probablement pas ce que vous voulez.

24
Ms2ger

Si vous cherchez "exactement", je vous recommande de lire le RFC .

L'élément keygen sert à créer une clé pour l'authentification de l'utilisateur tandis que SSL se préoccupe de la confidentialité de la communication et de l'authentification du serveur. Citant de la RFC

Cette spécification ne spécifie pas comment la clé privée générée doit être utilisée. Il est prévu qu'après avoir reçu la structure SignedPublicKeyAndChallenge (SPKAC), le serveur générera un certificat client et le proposera à l'utilisateur pour téléchargement; ce certificat, une fois téléchargé et stocké dans le magasin de clés avec la clé privée, peut ensuite être utilisé pour s'authentifier auprès des services qui utilisent TLS et l'authentification par certificat.

7
Andrew

Obsolète

Cette fonctionnalité a été supprimée des normes Web. Bien que certains navigateurs puissent toujours le prendre en charge, il est en cours de suppression. Évitez de l'utiliser et mettez à jour le code existant si possible. N'oubliez pas que cette fonctionnalité peut cesser de fonctionner à tout moment.

Source

5
Nermien Barakat

La doc est utile pour élaborer sur ce qu'est l'élément keygen. Son exigence se pose dans WebID qui peut être compris comme faisant partie du Web sémantique de données liées comme vu sur https://dvcs.w3.org/hg/WebID/raw-file/tip/spec/index-respec. html # création d'un certificat 2.1.1

0
Chawathe Vipul