Frage

Ich muss ein SSH -Schlüsselpaar generieren, mit dem ich später im Programm zusammenarbeiten werde, und brauchen sie daher als Zeichenfolgen. Leider die ssh-keygen Das Dienstprogramm unterstützt nicht das Schreiben der Schlüssel an stdout oder etwas wie.

Das "nächstbeste" wäre also zu haben ssh-keygen Schreiben Sie seine Ausgabe in temporäre Dateien, die ich dann wieder in das Programm lesen kann. Dies stellt jedoch das Risiko eines anderen Lesens der privaten Schlüsselfile dar (das Skript wird von einer Web -App ausgeführt).

Wie kann ich ein Schlüsselpaar auf eine Weise erzeugen, die sicher ist?

War es hilfreich?

Lösung

Es gibt keinen perfekt sicheren Weg, um private Schlüssel zur Verteilung zu generieren. Der sicherste Weg ist, dass jeder Kunde seine Tastaturen generiert und nur den öffentlichen Schlüssel übermittelt.

Wenn Sie sich jedoch in einer Situation befinden, in der dies einfach nicht funktioniert und sich zentral zur Erzeugung von Tastaturen entscheiden, haben Sie einige Optionen.

Es gibt Hardware -Sicherheitsmodule (HSMs), die dies für Sie tun. Wenn Sie es sich leisten können, ist dies der beste Weg.

Das nicht scheitern:

  1. Stellen Sie sicher, dass Ihre Web-App oder der Schlüsselverwalter unter seinem eigenen Benutzer ausgeführt wird (ich nenne diesen Benutzer "KGUSER" für den Rest dieser Antwort).
  2. Machen Sie ein nicht-wirg zugängliches Verzeichnis, das Kguser gehört, mit Berechtigungen 0700 (mit CHMOD eingestellt)
  3. Stellen Sie sicher, dass Ihre Key-Generator-Wrapper 'UMask 0177' setzt. Dies sollte sicherstellen, dass alle Dateien, die sie erstellen, 0600 sind (nur KGUSER kann lesen und schreiben können)
  4. Generieren Sie Ihre Schlüssel, die schwer zu qualifizierte Dateinamen angeben (z. B. zufällige UUID)
  5. CHMOD 0600 Die Schlüsseldateien, sobald Sie sie generieren, falls Ihre Ummask -Einstellung nicht gelten oder geändert wird
  6. Übertragen Sie den privaten Schlüssel über eine SSL/TLS -Verbindung
  7. Löschen Sie die private Schlüsseldatei sicher (z. B. "Shred" unter Linux)
  8. Verwenden Sie einen Cron -Job, um regelmäßig alle privaten Schlüsseldateien zu finden und sicher zu löschen, die älter als einige Minuten sind (um Dateien zu reinigen, die aufgrund eines Anwendungsfehlers, eines Absturzes usw. übrig bleiben).

Wenn Sie wirklich paranoid sind, können Sie auch sicherstellen, dass die Schlüssel auf der Festplatte verschlüsselt werden, indem Ihre Webanwendung ihren eigenen symmetrischen Schlüssel verwendet, um beim Senden an den Benutzer zu verschlüsseln und zu entschlüsseln. Dies öffnet sich jedoch mehr zum Schüsse, um es zu vermasseln, daher empfehle ich es nicht.

Das Einstellen einer Passphrase auf den Schlüssel hilft auch sehr, wenn Sie diese Passphrase nie auf Festplatte speichern. Wenn es jemandem schafft, einen passphrase geschützten Schlüssel wiederherzustellen, müssen er die Passphrase immer noch erraten, damit der Schlüssel nützlich ist. Dies bedeutet jedoch auch, dass Ihre Benutzer eine Passphrase bereitstellen müssen, wenn sie den Schlüssel verwenden - dies kann akzeptabel sein oder nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top