SSL und public key Sicherheit
Ich bin das konsumieren eines web service auf einem Android-Gerät über HTTP(s) mit SSL. Ein self-signed (nicht vertrauenswürdigen) Zertifikat wird für client-Authentifizierung.
Ich habe eine Allgemeine Verständnis, wie öffentliche/private Schlüssel für SSL verwendet. Aus meinem Verständnis kann ich deutlich sehen, wie ein Zertifikat verwendet werden kann, um eine sichere Verbindung und übertragen der Daten sicher. Aber ich verstehe nicht, wie Sie für die client-Authentifizierung, da das Zertifikat enthält den öffentlichen Schlüssel und wird nicht geheim gehalten.
Habe ich ein paar Fragen:
Wo kann ich darüber Lesen, wie SSL und Zertifikate verwendet werden können, für die client-Authentifizierung?
Selbst wenn das Zertifikat wurde nicht gemacht public...by besuchen Sie die HTTPS-URL in einem browser kann ich einsehen und speichern das Zertifikat. Dann kann ich das Paket bis Sie das Zertifikat in einem key store und verwenden Sie es, aus einer Anwendung.
In dieser Beitrag Jeremy Huiskamp schreibt
client-auth wird automatisch durchgeführt werden, wenn der server Anfragen
es
...also client-Authentifizierung als auch eine Verschlüsselung der Daten kann durchgeführt werden mit Zertifikaten?
Bearbeitet zu beantworten, den ersten Teil meiner Frage: Die client-keystore enthalten sollte, nicht nur den öffentlichen Schlüssel des Servers aber auch die client den privaten Schlüssel. Der server muss dann in der Lage sein zu entschlüsseln mit dem öffentlichen Schlüssel des Kunden? Bedeutet das, dass die keystore-sollten zwei Zertifikate?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zunächst ein kurzer Punkt über die Terminologie, in public-key-Kryptographie:
(Die Sie nicht wirklich "entschlüsseln" unter Verwendung eines öffentlichen Schlüssels.)
Verwendung von SSL/TLS mit oder ohne client-Authentifizierung, der server stellt eine Bescheinigung ( * ), für die Sie den privaten Schlüssel. Der server sendet sein Zertifikat während des SSL/TLS handshake (bei Beginn der Verbindung) und ist in der Lage zu entziffern, was der client sendet mithilfe seines privaten Schlüssels (was er hält, private). Der private Schlüssel und Zertifikate werden auf dem server gespeichert ist keystore (oder äquivalent, wenn es nicht in Java implementiert).
Als Teil dieser, verwendet der client seine truststore, das ist eine form, wie man einen Schlüsselspeicher, der vertrauenswürdigen Zertifikate enthält, die zum überprüfen der server-Zertifikat. Das server-Zertifikat vertraut werden könnte, indem Sie explizit in die truststore-oder, in den meisten Fällen vertrauenswürdig in Verbindung, um eine Vertrauenswürdige CA-Zertifikat in den truststore (PKI).
Die Terminologie zwischen keystore-und truststore-in Java kann ein bisschen verwirrend sein, finden Sie weitere details in dieser Antwort.
Bezüglich Ihrer Frage, der client-truststore enthalten nicht den öffentlichen Schlüssel des Servers, aber entweder das Zertifikat oder ein CA-Zertifikat, mit dem sollte es überprüfbar sein. (Es geht nicht nur darum, den öffentlichen Schlüssel, aber das wissen, dessen es ist, mit den anderen Informationen in das Zertifikat.)
Wenn Sie client-Zertifikat-Authentifizierung zusätzlich zu dieser, es ist ein truststore (oder gleichwertig) auf der server-Seite und ein keystore auf der client-Seite zu, da die Rollen vertauscht sind für diesen Zweck.
In der SSL/TLS-handshake, verwendet client-Authentifizierung fordert der server ein Zertifikat vom client, der sendet es (falls verfügbar).
Am Ende des Handshakes sendet der client eine
CertificateVerify
Nachricht, die Zeichen werden alle ausgetauschten Nachrichten, so weit zwischen dem client und dem server (es ist also etwas bekannt) über den privaten Schlüssel des Clientzertifikats. Der server ist dann in der Lage, dies zu überprüfen-Signatur gegen den öffentlichen Schlüssel des client-Zertifikats an Sie erhalten hat, als Teil dieses Austausches. Dies beweist der server, wer ist auf der client-Seite hat den privaten Schlüssel entsprechenden öffentlichen Schlüssel in das Zertifikat geschickt hat.Den nächsten Schritt für den server, um zu überprüfen, ob, diesem Zertifikat zu Vertrauen, d.h. ob sich Vertrauen in die Bindung zwischen Identität und den öffentlichen Schlüssel als vorgestellt und "versiegelt" in dem Zertifikat.
Dies erfolgt in der Regel über eine PKI, wobei Sie überprüfen Sie das Zertifikat mit einer bekannten CA, oder wenn Ihre deployment-Umgebung ist klein genug, gegen einen festen Satz von vertrauenswürdigen Zertifikaten. (Es kann sein,alternative Methoden der Prüfung, aber Ihre Brauchbarkeit wird wirklich hängt von den Umständen ab, wo Sie bereitstellen möchten und dieses system.)
Daher, für Ihre zweite Frage:
Da beide keystore-und truststore-ein keystore (in der storage format Sinne sind in der Regel eine Datei) für einen anderen Zweck eingesetzt wird, ist es oft möglich, den keystore zu dienen beide dem Zweck der keystore-und truststore.
(*) Es werden cipher suites, die verlassen Sie sich nicht auf Zertifikate, sondern das ist ungewöhnlich und off-topic für diese Frage.
Einem Zertifikat nur bindet eine Identität an einen öffentlichen Schlüssel. Diese Bindung ist nicht geheim, so gibt es keine Notwendigkeit zu halten, das Zertifikat Geheimnis. Wenn ich John Smith Zertifikat, ich kann beweisen, dass John Smith besitzt den geheimen Schlüssel entsprechend einem bestimmten öffentlichen Schlüssel. Aber da ich nicht weiß, dass geheime Schlüssel, das Zertifikat ist von keinerlei nutzen für mich.
Wann erfolgt die Authentifizierung per Zertifikat, ein Schritt ist immer zu haben, wer stellt das Zertifikat beweisen, dass Sie wissen, der geheime Schlüssel, der zum öffentlichen Schlüssel im Zertifikat. Wenn Sie nicht pass, Schritt, schlägt die Authentifizierung fehl.
Des Servers keystore sollte das Zertifikat des Servers. Der client der keystore muss der client das Zertifikat. Der Kunde präsentiert sein Zertifikat an den server, der server wird also lernen die Clients die öffentlichen Schlüssel, der Weg. (Und Umgekehrt.)