Ceci est une ancienne révision du document !


Signer des clés ssh par un certificat

Création des autorités

Clé que l'on utilisera pour signer la clé du serveur sshd :

ssh-keygen -t ed25519 -f host_ca -C "Host Certificate Authority"

Clé qui signera les clés des users autorisé·es à se connecter au serveur :

ssh-keygen -t ed25519 -f user_ca -C "User Certificate Authority"

Génération des clés

Clé du serveur sshd :

ssh-keygen -f ssh_host_ed25519_key -N '' -t ed25519

Clé d'un user :

ssh-keygen -t ed25519

Signature des clés

Signature de la clé du serveur sshd :

ssh-keygen -s host_ca -I <hostservername> -h -n <hostservername> -V '+52w' -z 0001 ssh_host_ed25519_key.pub
  • -h : on signe la clé d'un hostname et non d'un user.
  • -I <hostservername> : c'est le nom que l'on verra dans les logs, je préfère que l'on voit le nom du hostname mais on peut mettre n'importe quoi.
  • -n <hostservername> : ce sont les noms autorisés pour se connecter au serveur, on peut mettre plusieurs noms séparés par une virgule. Exemple : “myhost.example.org,myhost”.
  • -V '+52w' : le certificat sera valide 52 semaines. Si vide, il n'expire jamais.
  • -z 0001 : numéro de série du certificat (facultatif). Il permet de vérifier si un certificat obsolète est utilisé.

Signature de la clé d'un user :

ssh-keygen -s user_ca -I <user@hostname> -n user1,user2,user3 -V '+52w' -z 0001 id_ed25519.pub
  • -I <user@hostname> : c'est le nom que l'on verra dans les logs, je préfère que l'on voit le nom complet de l'user mais on peut mettre n'importe quoi.
  • -n user1,user2,user3 : c'est la liste des users autorisés auxquels on peut se connecter sur le serveur.

Il est possible d'ajouter des options :

-O no-agent-forwarding -O no-port-forwarding -O no-pty -O no-user-rc -O no-X11-forwarding

Vérifier le certificat

ssh-keygen -Lf id_ed25519-cert.pub

Intégrer les autorités sur les serveurs

Sur chaque serveur, copiez la clé publique du certificat user :

# install -m 644 user_ca.pub /etc/ssh/ssh_user_ca.pub

Peuplez le fichier known_hosts : echo “@cert-authority * <contenu de host_ca.pub du serveur>” > /etc/ssh/ssh_known_hosts

Ajoutez ces lignes dans /etc/ssh/sshd_config :

#HostKey /etc/ssh/ssh_host_ed25519_key  # Si besoin uniquement
HostCertificate /etc/ssh/ssh_host_ed25519_key-cert.pub
TrustedUserCAKeys /etc/ssh/ssh_user_ca.pub

Puis redémarrez le serveur sshd.

Ajoutez ces lignes dans /etc/ssh/ssh_config :

Host *
 IdentityFile ~/.ssh/id_ed25519
 CertificateFile ~/.ssh/id_ed25519-cert.pub

Dorénavant vous n'aurez plus jamais besoin des fichiers ~/.ssh/known_hosts et ~/.ssh/authorized_keys. En effet, le fichier /etc/ssh/ssh_known_hosts contient la clé publique du certificat qui signe les clés des serveurs sshd. Lors d'une 1ère connexion à un serveur, il ne vous sera plus demandée d'accepter (aveuglément) la clé du serveur.

Le fichier /etc/ssh/ssh_user_ca vérifie que le certificat envoyé est bien valide avec les options et les users autorisés, ce qui rend osbolète ~/.ssh/authorized_keys.

Merci aux auteurs de ces articles :

tuto/ssh-certificat.1713069458.txt.gz · Dernière modification : 2024/04/14 06:37 de Thomas
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0