Génération de certificats côté client dans le navigateur et de la signature de du serveur
Est-il possible de demander la génération du client, de la paire de clés dans le navigateur et envoyer la clé publique sur le serveur d'autorité de certification pour signer de manière transparente? Puis installez le certificat signé au navigateur de l'utilisateur?
Scénario:
- Utilisateur ouvre https://examle.com/ page web, serveur d'identité est vérifiée
- Utilisateur demande de création de compte
- Paire de clés est générée dans le navigateur de l'utilisateur et ne révèle pas de serveur/CA
- Pubkey est de l'envoyer au serveur pour la signature
- Serveur signes de la clé et génère un certificat
- Certificat est envoyé au client et installé dans le navigateur avec la clé privée
Prochaine fois que le client se connecte au serveur, son identité est vérifiée basée sur certificat client.
Ce serait bien si le serveur pourrait forcer/conseil au client de protéger sa clé privée à l'aide de cryptage de mot de passe.
J'ai vu les services bancaires en ligne à l'aide de l'applet java pour cette tâche. Est-il possible de le faire en utilisant navigateur natif des presses? Apache/PHP ou Node.js la solution serait la bienvenue.
OriginalL'auteur Kitten | 2012-02-08
Vous devez vous connecter pour publier un commentaire.
Oui, c'est possible. Il n'y a pas de cross-browser solutions.
X509Enrollment.CX509EnrollmentWebClassFactory
ouCEnroll.CEnroll
, selon qu'il est en cours d'exécution sur Windows XP ou Vista/7. Cela va générer un fichier PKCS#10 de la demande de certificat (dont vous pouvez avoir besoin de retour à la ligne entre le traditionnel délimiteurs.<keygen />
tag. C'est un héritage de Netscape tag, pas officiellement HTML avant, mais il a réalisé en HTML 5 (bien que MS ont dit qu'ils ne serait pas le soutenir dans leurs implémentations). Cela va générer une SPKAC structure similaire à celle d'un RSE).Voici un exemple de script qui devrait faire la plupart du travail pour ActiveX ou Keygen.
Lorsque le serveur envoie un certificat en retour (peut-être plus tard), le navigateur devrait l'importer dans son magasin et de l'associer avec la clé privée qu'il a suscité au moment de la demande.
La façon dont la clé privée est protégée dépendra du navigateur ou sous-jacents au magasin de certificats de mécanisme. Dans Firefox, il devrait y avoir un mot de passe maître sur le dispositif de sécurité, par exemple.
Sur le côté serveur, vous pouvez mettre en œuvre votre propre autorité de certification à l'aide de divers outils. OpenSSL et BouncyCastle peut gérer PKCS#10 et SPKAC. Voici une BouncyCastle exemple basé sur (associé avec le script ci-dessus), et un peu de code pour CRMF.
Si vous voulez une solution toute prête, vous pouvez être intéressé par quelque chose comme OpenCA.
Le
<keygen>
élément est déprécié selon W3C, WHATWG et SOCIÉTÉ et est volontairement désactivé dans google Chrome à partir de la version 49.OriginalL'auteur Bruno