2013-09-06 10 views
6

Wenn ich einen SFTP-Server von einem Client aus anschließe, muss ich der Client-Software nur den privaten Schlüssel und nicht den öffentlichen Schlüssel bereitstellen. Ich weiß nicht, wie das funktioniert, denn von [1] und [2] verlangen beide, dass die Client-Software auch den öffentlichen Schlüssel kennt.Warum muss SFTP-Client nur den privaten Schlüssel kennen, benötigt keinen öffentlichen Schlüssel?

Mein Verständnis davon, wie SFTP Arbeit ist

Setup

  • Client: private/öffentliche Schlüsselpaare erzeugen.

  • Client: public Schlüssel zum Server

  • Server senden: Fügen Sie diesen öffentlichen Schlüssel an seine autorisierten Schlüsseln Liste

während der Verbindung

  • Client: tell Server der Öffentlichkeit Schlüssel

  • Server: chec k, wenn der öffentliche Schlüssel autorisiert ist, wenn nicht, sich weigern, andernfalls

  • Client eine zufällige Session-ID an den Client senden: Client verwenden private Schlüssel zum Codieren der Zufalls Session-ID und

  • Server zu Server senden: dekodiere es mit dem öffentlichen Schlüssel und bestätige die Identität.

In diesem Fall benötigt der Client einen öffentlichen Schlüssel. Allerdings habe ich dies nicht zur Verfügung gestellt, aber der SFTP-Client ist immer noch in der Lage, den Server zu verbinden. Wie funktioniert dieses SFTP-Protokoll wirklich?

[1] http://www.openssh.org/txt/rfc4252.txt

[2] https://www.eldos.com/security/articles/1962.php

+1

Der Client berechnete den öffentlichen Schlüssel aus dem privaten Schlüssel. –

+0

danke! Das erklärt alles. auch, eine Randnotiz, kann ich den öffentlichen Schlüssel durch "ssh-keygen -y" erhalten, um den öffentlichen Schlüssel aus dem privaten Schlüssel (wie ich OpenSSH verwenden) – macsyz

+0

Es ist so erfrischend, eine tatsächliche * Frage * anstelle von "meine zu sehen code funktioniert nicht plz help ", ich werde ein upvote für genau das –

Antwort

3

Während @Pascal Cuoq Kommentar ist die richtige Antwort, es ist nur die Hälfte der Antwort, denn eigentlich muss der Client einen öffentlichen Schlüssel müssen - aber nur der Server öffentlichen Schlüssel, und Sie haben das bereits in Ihrer known_hosts Datei.

Wenn nicht - werden Sie aufgefordert, dem Server zu vertrauen, den der Server bei Ihrer ersten Verbindung mit dem Server anzeigt. Dies ist eine Sache, die die meisten Menschen komplett übersehen. Wenn Sie während der ersten Verbindung DNS-vergiftet sind (oder eine andere Form des Man-in-the-Middle-Angriffs aktiv ist) oder Server identity has changed nicht beachten, sind Sie anfällig für MitM-Angriffe.

+0

ich nicht ganz folgen, warum der Client den privaten Schlüssel und nicht den Server verwaltet. Aus der Frage und was ich gelesen habe ist, dass wenn ich mit einem Server eine Verbindung herstellen möchte, ich Schlüsselpaare generieren muss. Ich behalte den privaten Schlüssel und versorge den Server mit einer Kopie des öffentlichen Schlüssels.Was Sie anscheinend vorschlagen, ist, dass ich den öffentlichen Schlüssel des Servers benötige, der anzeigt, dass der Server einen privaten Schlüssel hat. Entschuldigung ich bin verwirrt. – Motivated

+0

@Motivated der Server hat auch einen privaten Schlüssel namens 'Host Key' - es wird verwendet, um den Server für Benutzer zu authentifizieren, nur wie Ihr privater Schlüssel verwendet wird, um Sie an den Server zu authentifizieren – Kimvais

+0

Dank Kimvais. Wenn ich weitere Fragen bezüglich SFTP hätte, würde es Ihnen etwas ausmachen, wenn ich Ihnen eine E-Mail schreiben würde? – Motivated

Verwandte Themen