Wie kann ich denselben Schlüssel für SSH und SSL (https) verwenden?


12

Ich versuche, die Entwicklungstools für ein kleines Team zu installieren, aber ich kann die Authentifizierung nicht richtig durchführen.

Da wir ein verteiltes Team sind, ist der Server im Internet. Und ich hätte gerne eine SSO + Zero-Client-Konfiguration.

Grundsätzlich ist Git über https + webdav unpraktisch, da der Git-Client nur die Basisauthentifizierung verwenden kann, aber das Passwort nicht speichert und einige IDE-Plugins die Passwortfrage nicht einmal in ihrer Benutzeroberfläche weiterleiten.

Ich muss dann git über ssh verwenden. Ich habe gitosis installiert und es funktioniert grundsätzlich mit asymmetrischen Schlüsseln, ok. Ich muss jeden Entwickler bitten, seinen Schlüssel zu installieren, das kann ich, vergiss die Null-Konfiguration.

Dann möchte ich, dass die Entwickler auf die Web-Tools (Wiki, Tickets usw.) zugreifen, die sich unter https befinden. Dieses Mal muss ich ihnen jedoch entweder ein Login / Passwort oder einen anderen privaten Schlüssel geben, nur weil die Formate zwischen SSH nicht kompatibel sind und SSL und der Ort, um es auf dem Betriebssystem zu speichern, ist nicht das gleiche. Jetzt muss ich den SSO vergessen?

Irre ich mich

Antworten:


11

TL; DR-Zusammenfassung: Wenn Sie ein SSL / X.509-Zertifikat + Schlüssel haben, geben Sie einfach die private Schlüsseldatei an ssh. Oder , wenn Sie bereits einen SSH - Schlüssel in haben id_rsa, verwenden Sie es nur mit OpenSSL einer CSR unterzeichnet. Das ist alles.


Angenommen, Sie haben das SSL-Zertifikat eines Benutzers joeuser.pemund dessen privaten Schlüssel eingegeben joeuser.key.

Da X.509 und SSH Standard-RSA-Schlüssel verwenden, sollten Sie Ihrem SSH-Client nur mitteilen können, dass er sie verwenden soll joeuser.key dass er sie verwenden soll. Die einzige Voraussetzung ist, dass sie in einem verständlichen Format vorliegen.

Schauen Sie sich die Innenseiten von an joeuser.keyund prüfen Sie, ob es ungefähr so ​​aussieht:

----- ANFANG RSA PRIVATE KEY -----
MGECAQACEQCxQaFwijLYlXTOlwqnSW9PAgMBAAECEETwgqpzhX0IVhUa0OK0tgkC
CQDXPo7HDY3axQIJANLRsrFxClMDAghaZp7GwU2T1QIIMlVMo57Ihz8CCFSoKo3F
2L / 2
----- RSA PRIVATE KEY BEENDEN -----

In Open SSL heißt dieses Format "PEM" (wie in -outform pem) und wird standardmäßig verwendet. Dasselbe Format wird von Open SSH verwendet , und Sie können es ssh -i joeuser.keyzum Herstellen einer Verbindung verwenden.

Sie können den öffentlichen Schlüssel im OpenSSH- id_rsa.pubFormat (zum Einfügen authorized_keys) extrahieren mit:

ssh-keygen -y -f joeuser.key> joeuser-ssh.pub

(Der gleiche öffentliche Schlüssel im PEM-Format kann mit extrahiert werden openssl rsa -pubout, ist jedoch wenig hilfreich.)


Wenn Sie einen DSA-Schlüssel haben, sollte dieser genauso funktionieren wie RSA.


Hallo, danke, aber ich weiß, dass ich für jeden Entwickler ein Schlüsselformat in ein anderes konvertieren kann, aber mein Problem ist, dass sie nicht so viele Konfigurationen wie möglich vornehmen müssen. Soweit ich mich erinnere (ich muss gestehen, ich habe es kürzlich nicht überprüft), ist das Hinzufügen eines 509-Zertifikats für alle Client-Browser nicht trivial.

4
nraynaud: Sie sind Entwickler . Wenn sie kein X.509-Zertifikat in ihrem Lieblingsbrowser installieren können (zumindest indem sie TFM folgen), ist dies bereits beängstigend.
user1686

...wie auch immer. Für NSS-basierte Browser (Firefox, Mozilla, Epiphany) gibt es eine Reihe von Befehlszeilentools, die geändert werden müssen cert.db. Für Windows können Zertifikate mithilfe von certutil oder (wie ich finde) mithilfe von AD-Gruppenrichtlinien installiert werden. Für SSH ist keine Konfiguration ssh-keygen -y -ferforderlich. Speichern Sie einfach beide Dateien im Verzeichnis homedir des Benutzers.
user1686

4
Sie sind keine Entwickler, sondern Erstsemester und Praktikanten. Ich hämmere sie nur mit Git, Websicherheit, Javascript, Sicherheit und sauberem Code. Ich möchte nur diese Art von nicht entwicklungsorientiertem Zeug einschränken. (Außerdem hasse ich Leute, die mir diese Art von dummen Dingen aufzwingen, damit ich es nicht anderen

2
Während dies funktionieren wird, rate ich davon ab. Sie verwenden dieselben Schlüssel, jedoch auf unterschiedliche Weise und in unterschiedlichen Formaten. Wenn Benutzer neue X.509-Zertifikate generieren, verwenden sie ohnehin andere Schlüssel für SSH und HTTPS. Es wäre sinnvoll, wenn OpenSSH die vollständige X.509-PKI unterstützen würde (so wie OpenVPN, wo Sie Skripte verwenden können, um Zertifikate mit LDAP zu verknüpfen und zu überprüfen, ob sich ein Benutzer in einer geeigneten Gruppe befindet).
Hubert Kario

5

OpenSSH bietet hier experimentelle Unterstützung für x509-Zertifikate:

http://roumenpetrov.info/openssh

Sie können ein einziges x509-Zertifikat pro Benutzer ausstellen und für beide verwenden.

Anstatt den Benutzer pubkey in ihre authorized_keys einzufügen, können Sie die zulässigen DNs der Benutzerzertifikate angeben. und Sie müssen den Webserver / die Webanwendung so konfigurieren, dass der DN in einen Benutzernamen übersetzt wird.


Vielen Dank, aber die Installation ist noch schlimmer als die Konfiguration, denke ich.

Du meinst die Installation der gepatchten Version von openssh? Möglicherweise wird es bereits von Ihrer Distribution geliefert (ich weiß, dass es zumindest Gentoo tut). Es hat keinen Sinn, denselben RSA-Schlüssel für beide Anwendungen zu verwenden, aber mit einem anderen Format - Sie müssen den öffentlichen ssh-Schlüssel jedes Benutzers immer noch manuell einrichten. OTOH, mit x.509-Schlüsseln können Sie Ihre Zertifizierungsstelle getrennt halten, und das Hinzufügen neuer Benutzer zu SSH oder HTTPS kann ohne Kenntnis ihres öffentlichen Schlüssels erfolgen. Sie müssen lediglich eine konsistente DN-Richtlinie
auswählen

2
Zu Ihrer Information, diese Funktionalität ist jetzt in der Hauptversion von OpenSSH enthalten.
Zoredache

1

Sie haben so ziemlich Pech - SSH-Schlüssel und SSL-Zertifikate sind verschiedene Tiere und meines Wissens nicht austauschbar.

Am besten konfigurieren Sie Single Sign-On / Shared Password Store / Was auch immer für Ihre Web-Tools und lassen git / gitosis als Authentifizierungsinsel.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.