Also wie ich mir das bisher gedacht habe:
Vorbereitung:
- Client erstellt sich eine OpenSSL User Zertifikat (Mit entsprechenden Tools, ka was Windows da so bietet, unter Linux ist das kein Problem)
- Der Server wird so konfiguriert, dass er Benutzerzertifikate verlangt.
- Der Server wird so konfiguriert, dass er die SSL Daten an PHP übergibt.
- Das Serverseitige script kann nun Zertifikatdaten vom User auslesen.
- Und ne ganz normale Benutzer/Passwort Datenbank dazu.
Registrierung:
- Client ruft reg seite auf
- Server fragt nach SSL key
- User wählt im Browser den Key aus.
- Server speichert für den Benutzer die KeyID/Hash/oder andere Informationen in der Datenbank.
Login:
- Client ruft https Seite auf.
- Server fragt nach SSL Cert
- Client Browser fragt den User welches Zertifikat er senden will
- in PHP werden Daten ausgelesen und mit der Nutzerdatenbank verglichen
Und wer es besonders sicher haben möchte kann das ganze ergänzen:
Registrierung:
...
- User wählt Zert aus
- Server signiert das Zert mit seinem Privaten Key.
- Server schickt dem User das signierte Zertifikat (welches er wieder in den Browser importieren muss)
- Server speichert Nutzerdaten wieder in der Datenbank
Beim Login wird dann zusätzlich die Signatur überprüft, da SSL Schlüssel IDs glaube ich nicht fälschungssicher sind.. aber vermutlich immer noch sicherer als jedes Passwort