Je comprends assez bien l'ICP d'un point de vue conceptuel - c'est-à-dire les clés privées / clés publiques - les mathématiques derrière elles, l'utilisation du hachage et du cryptage pour signer un certificat, la signature numérique des transactions ou des documents, etc. J'ai également travaillé sur des projets où openssl Les bibliothèques C ont été utilisées avec des certificats pour sécuriser la communication et l'authentification. Je connais également très bien les outils de ligne de commande openssl.
Cependant, j'ai très peu d'expérience avec les projets basés sur le PKI sur le Web et j'essaie donc de concevoir et de coder un projet personnel pour mieux comprendre cela.
Les exigences
Ceci est le site Web d'une banque. Tous les utilisateurs d'Internet Banking sont autorisés à utiliser n'importe quel certificat délivré par quelques autorités de certification connues (verisign, Thawte, entrust, etc.). La Banque n'est pas responsable de l'obtention des certificats pour l'utilisateur. Ces certificats seront utilisés pour l'authentification sur le site Web des banques. Les plates-formes / OS, etc. ne sont toujours pas fixes.
Conception
Je me demandais quelle était la meilleure façon de faire l'authentification.
J'ai vu qu'Apache a un moyen d'activer le SSL bidirectionnel - dans ce cas, je pense que la navigation vers le site Web demanderait automatiquement un certificat à l'utilisateur. Mais je ne sais pas si cela suffit, car il semble que tout ce qu'il vérifie est de savoir si un certificat est signé par une autorité de certification de confiance et peut également être s'il tombe dans une liste blanche de lignes d'objet des certificats, etc. Mais cela ne suffit pas pour un dossier bancaire, car vous devez pouvoir associer un identifiant utilisateur à un certificat.
IIS semble avoir un moyen par lequel je peux avoir un certificat stocké pour chaque utilisateur dans Active Directory. C'est ce que j'ai compris en lisant quelques articles MSDN. Vous activez SSL bidirectionnel dans IIS, puis lorsque l'utilisateur essaie de naviguer sur le site Web, IIS enverra une demande au navigateur avec une liste des autorités de certification approuvées et le navigateur permettra à l'utilisateur de choisir un certificat approprié dans son magasin de certificats et de l'envoyer. au backend. Je suppose que IIS fera 2 choses
- Assurez-vous que l'utilisateur dispose de la clé privée correspondant au certificat (par sous les négociations de couverture)
- Sur la base du mappage de certificats d'utilisateurs AD, IIS signalera le nom d'utilisateur à l'application.
Faites l'authenticité en appelant des fonctions de chiffrement plutôt en fonction du serveur Web pour le faire.
- Afficher un écran utilisateur où il télécharge un certificat et l'application s'assure que l'utilisateur possède la clé privée correspondant au certificat (en demandant au frontal de signer une chaîne à l'aide du certificat).
- L'application possède une base de données dont certaines données sont stockées, ce qui permet à chaque utilisateur d'être mappé à son ID utilisateur. Cela peut être
- le certificat entier correspondant à chaque ID utilisateur
- le numéro de série CA et cert correspondant à chaque ID utilisateur.
Je me demandais quelle est la méthode couramment utilisée? Quelles sont les meilleures pratiques? Si je devais choisir le n ° 3, quelles sont les meilleures façons de procéder?
Quelque chose qui peut également fonctionner facilement avec les applications de smartphone sera un bonus supplémentaire.
Mise à jour
Permettez-moi de clarifier ma déclaration "coder moi-même la partie d'authentification" parce que certaines des réponses semblent indiquer qu'elle a été mal comprise - mon mal de ne pas être clair.
Cela ne signifie pas que j'écris moi-même des trucs cryptographiques. Cela signifie simplement que j'appellerai en fait des routines de chiffrement explicitement au lieu de dépendre d'IIS ou de tout autre serveur Web de le faire implicitement.