Dies ist eine alte Version des Dokuments!
Die Authentifizierung über OpenSSH Keys haben wir schon angesprochen. Das Ganze hat aber ein paar Unschönheiten. Zum einen muss der Public Key erstmal in die authorized_keys Datei des Servers gelangen (siehe ssh-copy-id), wozu erstmal ein Passwort erforderlich ist. Passworte haben aber die unangenehme Eigenschaft abzulaufen und daher regelmäßig geändert werden müssen, auch wenn man sie gar nicht benutzt.
Will man die Berechtigung zentral verwalten meist die Passwort Authentifizierung im SSH abgeschaltet um sicherzustellen, das die Server nur von ausgewähltem Personal erreicht werden können. Darüberhinaus kommen auch SSH private Keys, genau wie Passworte, schon mal abhanden, sind also „verbrannt“. Aus Sicherheitsgründen sollten also auch die Key Pairs regelmässig ausgewechselt werden. Also muss auch das Alter eines Keys nachgehalten werden.
All diese Dinge können ad acta gelegt werden, wenn man die Keys authorisiert und diese Authorisierung im Key hinterlegt. Wenn man nun der authorisierenden Stelle (oder Person) vertraut, reicht es aus, wenn ein SSH Key unterschrieben (digita signiert) ist.
Genauso, wie der Server ein Interesse daran hat, die User zu authentifizieren, benötigt auch der Benutzer eine Möglichkeit den Server als vertrauenswürdig zu erkennen. OpenSSH bietet nicht nur die Möglichkeit, den Key des Benutzers zu signieren sondern auch den des Servers. Auch die OpenSSH Hostkeys können also signiert werden und der User kann die Signatur des Hostkeys prüfen.
Nun aber in Media Res:
Die CA besteht eigentlich nur aus einem Key Pair, wie jeder andere SSH-Key. Allerdings wird dieser Key nicht zur Authentifizierung eines Benutzers sondern zur Erstellung einer digitalen Signatur genutzt. Idealerweise liegt der private Key der CA auf einem Rechner ohne Internetverbundung, um zu vermeiden das Hacker selbst ihre Keys signieren.
Der Key wird wie immer mit ssh-keygen angelegt
ssh-keygen -b 2048 -t rsa -C "Meine Certification Authority" -N "Passphrase" -f id_rsa_userca
Dieser Key wird nun genutzt, um die Public Keys der User zu signieren.
ssh-keygen -s id_rsa_ca -I "vorname.machname@example.com" -n "unixuser1,unixuser2" -V +2w -z 1 id_rsa.pub
Damit ist der Key signiert, und man kann die Signatur mit ssh-keygen anschauen:
ssh-keygen.exe -L -f id_rsa-cert.pub
Die Ausgabe sieht wie folgt aus:
id_rsa-cert.pub: Type: ssh-rsa-cert-v01@openssh.com user certificate Public key: RSA-CERT SHA256:gbg5aGoDtSFwl5sz9kf19IxbrooD6BrpaqQubSA2MLU Signing CA: RSA SHA256:RgdqfmX3VxV+Gd5dYQdOPlywoVSbxif0tSyoQASq8gg Key ID: "vorname.machname@example.com" Serial: 1 Valid: from 2017-11-27T21:12:00 to 2017-12-11T21:13:50 Principals: unixuser1 unixuser2 Critical Options: (none) Extensions: permit-X11-forwarding permit-agent-forwarding permit-port-forwarding permit-pty permit-user-rc