OpenSSL und s_client - warum wird ein privater Schlüssel vom Client benötigt?
Ich brauche, um das setup ein 2-Wege-SSL-Kommunikationskanal zwischen einer .NET/WCF-Anwendung und eine Dritte Partei web-server. Jetzt versuche ich bekomme einen erfolgreichen handshake mit dem host, um zu überprüfen, dass alle Elemente sind richtig eingestellt (client-Zertifikats server-Zertifikat-Autorität, Netzwerk, Kommunikation...). Ich bin mit dem openSSL command line tool zu versuchen und zu überprüfen, mit dem s_client-Befehl.
Hier ist, was hindert mich, und was ich nicht verstehe:
- was ich Tue, openSSL ist in der Erwartung zu finden, die einen privaten Schlüssel für die
client Zertifikat - das client-Zertifikat wurde mir von der Dritten, aber es
enthält keinen privaten Schlüssel - wenn ich nur die Erstellung meiner eigenen private key Datei mit openSSL, ich bin immer
ein Schlüssel-Werte-mismatch-Fehler
Halten Sie im Verstand, ich habe gerade angefangen, meine Hände in SSL also ich habe ein sehr grundlegendes Verständnis des gesamten Protokolls. Von dem, was ich gelesen habe, es scheint, dass sowohl client als auch server brauchen Ihre privaten Schlüssel in einer 2-Wege-SSL-Einstellung. Allerdings kann ich nicht herausfinden, wie man einen funktionierenden privaten Schlüssel auf meinem client (arbeiten mit client-Zertifikat, wurde mir gegeben).
Ich würde es sehr begrüßen, wenn jemand könnte etwas Licht auf den client-Zertifikat, privater Schlüssel, so dies gibt mir eine große Kopfschmerzen.
Dank!
InformationsquelleAutor der Frage Aerendel | 2012-06-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zertifikate auf Ihre eigenen sind nur öffentliche Informationen. Was verbindet eine public-key-Zertifikat, um den Namen, den es enthält, ist die Tatsache, dass, wer hat legitime Kontrolle über die Namen (z.B. Ihren Namen oder den Namen des Servers) auch den privaten Schlüssel.
Zertifikate werden verwendet, um zu beweisen, die Identität der Gegenseite durch die Herausforderung der Gegenseite an, eine operation auszuführen, können nur mit dem zugehörigen privaten Schlüssel: signieren von etwas (was überprüft werden kann mit dem öffentlichen Schlüssel) oder entschlüsseln, was mit dem öffentlichen Schlüssel verschlüsselt. (Beides kann passieren, in der SSL/TLS-handshake, je nach dem cipher-suite.)
Während des SSL - /TLS-handshake sendet der server sein Zertifikat (in klar) und beweist der AUFTRAGGEBER, dass er über die entsprechenden privaten Schlüssel mit einer authentifizierten Schlüsselaustausch.
In Ihrem Fall, Sie auch wollen, verwenden Sie die client-Zertifikat-Authentifizierung. Es ist nicht genug, zum senden von dem client-Zertifikat während des handshake: der client muss es auch beweisen den privaten Schlüssel. Ansonsten, wer erhält das Zertifikat könnte-Klon. Der Punkt, der mit Hilfe von Zertifikaten zu verhindern, dass irgendwelche Klonen, in einer Weise, die Sie nie haben, um zu zeigen, Ihr eigenes Geheimnis (der private Schlüssel).
Genauer gesagt, hat der AUFTRAGGEBER zu unterzeichnen, der Handschlag Nachrichten in der Zertifikat Überprüfen Nachricht von der TLS-handshake, so dass der server überprüfen kann es gegen den öffentlichen Schlüssel geschickt in das client-Zertifikat. Ohne diesen Schritt wird kein client-Zertifikat Authentifizierung stattfinden würde.
Geben Sie Ihr Zertifikat ohne den privaten Schlüssel scheint ein bisschen sinnlos, es sei denn, man erwartet, erzeugt eine Zertifikat-Anforderung auf Ihrer Seite zu haben (in dem Fall müssen Sie den privaten Schlüssel).
In der Tat, anstatt ein Zertifikat und seinen privaten Schlüssel, es ist besser, der Praxis für Sie zu generieren Ihres Schlüsselpaars, erstellen Sie eine Zertifikat-Anfrage (CSR), und haben Ihre ZERTIFIZIERUNGSSTELLE eine Bescheinigung aus, dass CSR (aber ohne Sie jemals zu wissen, dass Ihr privater Schlüssel). In diesem Fall würde man erwarten, gehalten zu haben, Ihren privaten Schlüssel haben, und Sie wäre in der Lage, es zu benutzen mit dem cert, die Sie erhalten hätten.
InformationsquelleAutor der Antwort Bruno