L'utilisation de certificats permet de garantir l'identité du client et du serveur.
Le certificat présent par le client ou le serveur est signé par la clé privée d'une authorité de certification reconnue.
Une clé publique SSH est une chaîne de texte en une seule ligne, avec plusieurs parties distinctes : <type> <clé encodée en base64> <commentaire facultatif>
Type : Spécifie l'algorithme utilisé pour générer la clé. Par exemple :
Clé encodée en base64 : chaîne encodée en Base64 représentant la clé publique.
Commentaire facultatif : information pour identifier la clé : nom d'utilisateur et l'hôte depuis lequel la clé a été générée.
TrustedUserCAKeys /etc/ssh/ca.pub
IMPORTANT : le certificat du client ne sera considéré que si sa liste de nom-clés (principal) contient le nom du compte auquel il tente de se connecter.
SAUF si un fichier spécifique à chaque compte indique la liste des noms-clés acceptés. Directive AuthorizedPrincipalsFile dans sshd_config
Le client doit faire signer sa clé publique pour obtenir un certificat qui doit être placé dans le même répertoire que sa clé privé et publique.
cp client_key ~/.ssh/ cp client_cert.pub ~/.ssh/
Les permissions doivent être correctes :
chmod 600 ~/.ssh/client_key chmod 644 ~/.ssh/client_cert.pub
Lors d’une connexion avec la clé privée, le certificat sera automatiquement présenté au serveur.
Le client ssh doit seulement indique quelle clé privée utiliser avec l’option -i
ssh -i ~/.ssh/client_key nomDNSserveur
Ainsi même s’il n’y a pas de clé publique client dans authorized_keys, l’authentification se fait. L’option -v permet de voir l’utilisation du certificat
ssh -v -i ~/.ssh/client_key nomDNSserveur
Vous pouvez utiliser aussi le fichier de configuraito du client ssh
Host <nom_du_serveur> HostName <adresse_du_serveur> User <nom_utilisateur> IdentityFile ~/.ssh/client_key CertificateFile ~/.ssh/client_cert.pub
$ ssh-keygen -y -f utilisateur-identite.pem > id_rsa.pub
$ openssl x509 -in charles-cert.pem -pubkey –noout > id_rsa.pem
noout permet d’avoir uniquement la clé publique sans le certificat
$ ssh-keygen -i -m PKCS8 -f id_rsa.pem > id_rsa.pub
$ openssl x509 -in pkicub-cert.pem -pubkey –noout > ca.pem
* Convertir la clé publique du format PEM au format openssh
$ ssh-keygen -f ca.pem > ca.pub
journalctl -u ssh
ssh -v <nom_du_serveur>
echo "@cert-authority *.example.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQE..." >> ~/.ssh/known_hosts
Cela permet au client de faire confiance à tous les serveurs avec des certificats signés par cette CA.
openssl x509 -in filename.pem -text –noout
-noout pour ne pas afficher en base64 qui permet d’encode des données binaires ASCII
openssl x509 -in filename.pem -issuer –noout
openssl x509 -in filename.pem -subject –noout
openssl x509 -in filename.pem -fingerprint –noout
openssl x509 -in filename.pem –pubkey -noout –out id_rsa.pub