Frage Wie unterstütze ich die SSL-Client-Zertifikat-Authentifizierung?


Ich möchte tun, was myopenid tut - nachdem Sie sich angemeldet haben, können Sie auf eine Schaltfläche klicken, die ein SSL-Zertifikat generiert. Der Browser lädt dann dieses Zertifikat herunter und speichert es. Wenn Sie später zu yourid.myopenid.com zurückkehren, kann Ihr Browser das gespeicherte Zertifikat zur Authentifizierung verwenden, sodass Sie kein Passwort benötigen.

Also meine Fragen ist, was benötigt wird, um dies zum Laufen zu bringen? Wie erstelle ich Zertifikate? Wie validiere ich sie, sobald sie mir präsentiert werden?

Mein Stack ist Rails auf Apache mit Passenger, aber ich bin nicht besonders.


9
2017-08-26 16:57


Ursprung


Antworten:


Diese werden normalerweise als clientseitige Zertifikate bezeichnet.

Ich habe es nicht wirklich benutzt, aber eine modifizierte Version der Restful-Authentifizierung kann hier gefunden werden Hier das sieht aus wie dein Nachher.

Ich habe das via gefunden Dr. Nics Beitrag


8
2017-08-26 17:51



Hängt vom Server ab, aber die einfachste Lösung, die ich kenne, mit Apache:

FakeBasicAuth

"Wenn diese Option aktiviert ist, wird der Subject Distinguished Name (DN) des Client X509-Zertifikats in einen HTTP Basic Authorization-Benutzernamen übersetzt. Dies bedeutet, dass die Standard Apache-Authentifizierungsmethoden für die Zugriffssteuerung verwendet werden können. Der Benutzername ist nur der Betreff des X509-Zertifikats des Clients (kann durch Ausführen des OpenSSL-Befehls openssl x509 ermittelt werden: openssl x509 -noout -subject -in certificate.crt). Beachten Sie, dass kein Passwort vom Benutzer erhalten wird ... "

Nicht sicher über Schienen, aber die übliche REMOTE_USER-Umgebungsvariable sollte in irgendeiner Weise zugänglich sein.


2
2017-08-26 18:01



Wenn Sie Zertifikate generieren möchten, müssen Sie veranlassen, dass der Client ein Schlüsselpaar generiert und Ihnen mindestens den öffentlichen Schlüssel sendet. Sie können dies in Firefox über einen Javascript-Aufruf tun, es ist crypto.generateCRMFRequest. Ich vermute, dass auch in anderen Browsern browserspezifische Methoden zur Verfügung stehen. Aber zuerst müssen Sie herausfinden, wie ein Zertifikat ausgestellt wird, sobald Sie einen öffentlichen Schlüssel erhalten.

Sie könnten etwas auf dem Server mit OpenSSL scripten, aber es hat eine integrierte Unterstützung für CSRs, nicht das CRMF-Format, das Firefox Ihnen sendet. Sie müssten also Code schreiben, um den CRMF in einen CSR zu konvertieren, der eine Art DER-Verarbeitungsfähigkeit erfordert ... Ich kratze nur an der Oberfläche - der Betrieb einer CA, selbst für eine Spielzeuganwendung, ist nicht trivial.

SSO-Lösungen wie OpenId und PKI-Lösungen überschneiden sich, und PKI ist elegant. Aber der Teufel steckt im Detail, und es gibt gute Gründe dafür, dass dieser Ansatz schon lange existiert, aber erst in Regierungs- und Militäranwendungen Einzug gehalten hat.

Wenn Sie daran interessiert sind, dies zu verfolgen, sollten Sie einige Fragen zu der Plattform beantworten, auf der Sie Ihren CA-Dienst entwickeln möchten.


1
2017-08-28 20:39



Ich habe an einer Lösung für dieses Problem gearbeitet. Ich wollte das Gleiche tun und ich weiß, dass viele andere Website-Besitzer diese Funktion wünschen, mit oder ohne einen Drittanbieter.

Ich habe das notwendige Server-Setup und ein Firefox-Plugin für die zertifikatbasierte Authentifizierung erstellt. Gehe zu mypassfree.com, um das kostenlose Firefox-Plugin zu erhalten. Mailen Sie mir (Link auf dieser Seite) für das Server-Setup, da ich es noch nicht mit einem netten Installer verpackt habe.

Server-Setup ist Apache2 + OpenSSL + Perl (aber Sie könnten die Perl-Skripte in jeder Sprache neu schreiben)

Jonathan


0
2018-01-09 19:58



Sie können ein Zertifikat im Browser des Clients mit browserspezifischem Code generieren. Sehen diese Frage

Sie können SSL-Client-Zertifikate auch serverseitig mit OpenSSL in Ruby generieren (Siehe dieses q). (Dies funktioniert in jedem Browser ohne browserspezifischen Code, aber Ihr Server hat den privaten Schlüssel des Clients generiert, der für Krypto-Puristen nicht ideal ist.)

Unabhängig von der Methode, mit der Sie sie generieren, müssen Sie Ihren Webserver so konfigurieren, dass er die Client-Zertifikate benötigt. Sehen die Apache-Dokumente zum Beispiel.


0
2017-10-29 14:49