Zwei-Wege-Autorisierung mit PFX-Datei
Ich habe ein problem mit zwei-Wege-Authentifizierung. Ich Benutze tomcat6 als server und als client versuche ich den IE, Firefox und meine eigene java Anwendung.
Tritt das problem mit PFX-Zertifikaten, die mir von jemand anderes. Ich habe Sie als ein client-Zertifikat, so dass ich nur hinzufügen, dass es zu trusted-certs auf dem server und verwenden Sie es auf die browser-Benutzer-Zertifikate. Das problem ist, dass ich bad_certificate alert.
Habe ich geschafft, zwei-Wege-ssl durch die Erstellung meiner eigenen Zertifikate für server und client und hinzufügen von öffentlichen Schlüsseln als vertrauenswürdig in beide keystores etc...
Wenn ich sehe, wireshark-logs sehe ich, dass der server sendet die gute-Zertifikat anfordern, sondern client sendet leere Zertifikat (11 bytes length packet) statt 500+ bytes, wenn ich meine eigene erzeugte cert.
Was kann das problem sein? Warum-client sendet nicht gut cert? 🙁
- Sie haben bereits Ihre setup-server für die client-Authentifizierung, die Sie sagen?Welche Art der keystore haben Sie für Ihren Anschluss?
- jks, i dont denke, es ist das problem, weil es funktioniert mit meinem eigenen Schlüssel generiert, und arbeitet mit openssl s_client mit pfx-Taste. Nur funktioniert nicht mit pfx mit firefox,ie(mit Schlüssel in windows store) oder java-app zeigt auf p12-keystore
- Die Art und Weise, die Sie beschreiben es die pfx ist leer oder beschädigt.Haben Sie versucht, um seinen Inhalt anzuzeigen?
- Es ist in Ordnung! Voll!!! Es erfolgreich importiert werden kann, um den windows store, es können importiert werden, um firefox und auch Lesen im java-Anwendung angezeigt werden kann, verifiziert und viele, viele mehr. Sogar mehr, kann ich Extrakt pem aus und verwenden Sie es über openssl s_client eine Verbindung herstellen! Es sieht ganz gut aus, aber aus irgendeinem Grund nicht senden Sie als Antwort auf die Zertifikatsanforderung, die von firefox/IE/java-app, nur openssl s_client nutzt es auch :/
- Setzen Sie das Debuggen Fluss der problematischen Szenario in den OP
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nun, die erste Sache zu prüfen ist, um zu sehen, ob Tomcat korrekt konfiguriert ist, um ein Zertifikat vom client für den Pfad in Frage. Für Tomcat 6, das heißt, Sie sollten einen Connector konfiguriert conf/server.xml so etwas wie dieses:
Den truststoreFile & truststorePass sind wichtig - wenn Sie fügen Sie einfach "clientAuth= "true" ohne die Einbeziehung dieser beiden Parameter, werden Sie sehen, alle Arten von seltsamen Verhalten (und keine Warnung, dass Sie haben nichts falsch). Die truststoreFile zeigen muss, um eine legitime JKS-Datei, die eine Liste der Zertifizierungsstellen, denen Sie Vertrauen, zu unterzeichnen, die client-Zertifikate. Wenn Tomcat richtig konfiguriert ist, der browser sollte pop-up ein Dialogfeld, um den Benutzer entlang der Linien von: "Die website erfordert ein client-Zertifikat", zusammen mit einer Liste aller Zertifikate, die wurden in den browser importiert wurden. Wenn Sie nicht sehen, es ist etwas falsch mit Ihrem Tomcat-setup.
Es klingt wie Sie haben, die richtig eingerichtet, aber es lohnt sich zu überprüfen. Auch, wenn Sie es richtig eingerichtet ist, sehen Sie ein "Zertifikat anfordern" handshake-Nachricht, wenn Sie die Ablaufverfolgung der Verbindung in wireshark, dass die Listen der vertrauenswürdigen Zertifizierungsstellen durch den distinguished name. Wieder, wenn Sie nicht sehen, überprüfen Sie Ihre Tomcat-setup und vor allem den truststore.
Die nächste Sache wäre zu prüfen, die die PKCS12-Datei selbst. Sie können dies tun mit:
Stellen Sie sicher, dass die issuer distinguished name mit einer der trustedCaCert Einträge in Ihren trust store. Dies ist eine Art von ärger zu tun mit dem Java-keytool, aber Sie können überprüfen mit:
Wenn das alles checkt, aber es ist immer noch nicht funktioniert, lohnt es sich, mithilfe von openssl ' s s_client zu beheben, da Sie in der Regel viel mehr Informationen zur Fehlerbehebung aus. Dies zu tun, müssen Sie separate Schlüssel aus dem cert in der PKCS12-Datei:
(Sie können die gleiche Datei für die "-cert" und "key" - argument, denn openssl ist schlau genug, sich nach der "BEGIN CERTIFICATE" und "BEGIN RSA PRIVATE KEY" Trennzeichen in den source-Dateien). Ich hatte eine frustrierende problem mit client-certs, die ich nicht herausfinden konnte, einmal, bis ich verwendet, s_client und bekam eine Erinnerung daran, dass mein client-Zertifikat abgelaufen war (war auch nicht angemeldet oder Ausgabe überall sonst).
Auch, möchten Sie vielleicht dringend in Erwägung ziehen, verschieben Sie Ihre Konfiguration für den Apache über Tomcat - Apache ist ein viel flexibler und gibt Ihnen eine viel mehr feedback, wenn es um SSL geht confifguration als Tomcat.
Nehmen Sie einen genaueren Blick auf Ihre client-Zertifikate, insbesondere die X509v3 Erweiterungen "Schlüsselverwendung" und "Erweiterte Schlüsselverwendung". Sie kann gekennzeichnet werden als nicht vertrauenswürdig für die client-Authentifizierung.
Mithilfe der openssl command line tool:
Dieses Zertifikat ist nur unterschrieben für die server-Authentifizierung (normale HTTPS). Für vollständige details, verwenden Sie die option text in openssl x509:
Wenn dies der Fall ist, sind Sie gehen zu müssen, zu Fragen, zu bekommen, ein neues signiertes Zertifikat gekennzeichnet ist, für die client-Authentifizierung verwenden.