Outils pour utilisateurs

Outils du site


reseau:certificat:certificatsopenssh

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
reseau:certificat:certificatsopenssh [2026/06/28 19:34] – [Génération du couple de clés privée / publique par le client] techer.charles_educ-valadon-limoges.frreseau:certificat:certificatsopenssh [2026/06/28 23:13] (Version actuelle) techer.charles_educ-valadon-limoges.fr
Ligne 21: Ligne 21:
 </code> </code>
 </WRAP> </WRAP>
 +
 +
 +La commande suivante d'afficher ces différents clés publiques d'un serveur SSH (RSA, ECDSA et ED25519):
 +<code shell>
 +$ ssk_keyscan adresseIPserveurssh
 +</code>
  
 ===== Génération du couple de clés privée / publique par le client ===== ===== Génération du couple de clés privée / publique par le client =====
Ligne 28: Ligne 34:
   * option **-t** : préciser le tp de clés :  dsa, rsa, ecdsa ou ed25519 (valeur par défaut) ;    * option **-t** : préciser le tp de clés :  dsa, rsa, ecdsa ou ed25519 (valeur par défaut) ; 
   * option **-b** : préciser la longueur de la clé (2048 par défaut).   * option **-b** : préciser la longueur de la clé (2048 par défaut).
 +  * option **-C** : préciser un commentaire pour identifier la clé publique : courriel, nom, etc..
  
  
  
 <code shell> <code shell>
-$ ssh-keygen +$ ssh-keygen -C "Charles Técher"
 </code> </code>
 +
 +    * sécuriser la clé privée
 +
 +<code shell>
 +$ chmod 600 ~/.ssh/id_ed25519
 +</code>
 +
  
 Les clés privée et publique sont enregistrées dans le dossier **~/.ssh** :  **id\_ed25519** et **id\_ed25519.pub**.  Les clés privée et publique sont enregistrées dans le dossier **~/.ssh** :  **id\_ed25519** et **id\_ed25519.pub**. 
Ligne 59: Ligne 73:
 Pour cela, il suffit de **copier** le contenu de votre clé publique dans le fichier **~/.ssh/authorized\_keys** du compte du serveur. Pour cela, il suffit de **copier** le contenu de votre clé publique dans le fichier **~/.ssh/authorized\_keys** du compte du serveur.
  
-Exemple pour un compte appelé sio créé sur le serveur distant :+  * Exemple de copie automatique de la clé publique pour un compte appelé sio créé sur le serveur distant :
  
 <code shell> <code shell>
-cat ~/.ssh/id_ed25519 | ssh sio@ipserveur cat +ssh-copy-id sio@ipserveur  
 +</code> 
 + 
 +  * Exemple de copie manuelle de la clé publique pour un compte appelé sio créé sur le serveur distant : 
 + 
 +<code shell> 
 +cat ~/.ssh/id_ed25519.pub | ssh sio@ipserveur "cat >> ~/.ssh/authorized_keys" 
 </code>  </code> 
  
 +===== Gestion des serveurs connus =====
 +
 +Votre client SSH va **vérifier l'identité du serveur distant** avant de se connecter. Le fichier **/etc/ssh/ssh\_config** permet de  configurer le client SSH pour tous les utilisateurs de votre ordinateur, et le fichier **~/.ssh/config** uniquement pour l'utilisateur qui a ouvert une session.
 +
 +Lors de la **première connexion** du client sur le serveur distant, vous recevez un **message avertissement** et vous devez confirmer, à vos risques et périls, que vous acceptez de vous connecter à ce serveur. Dans ce cas, une trace du serveur (**empreinte SSHFP** - SSH FingerPrint), est enregistrée dans le fichier **~/.ssh/known\_hosts**. Lors d'une prochaine connexion, si la trace d'une connexion précédente est trouvée, vous n'aurez plus le message d'avertissement.
 +
 +La commande suivante permet de **prendre connaissance de l'empreinte** de la **clé publique** du serveur distant, et de la communiquer aux utilisateurs client pour **vérification** :
 +<code>
 +$ ssh-keygen -l -f /etc/ssh/ssh_host_ed25519_key.pub
 +</code>
 +
 +===== Inconvénients de l'usage des clés publiques =====
 +
 +Les clés publiques d'un serveur peuvent être changées et ne plus être celles  initialement crées. C'est le cas lors d'une attaque de type Man-In-The-Middle.
 +
 +De même, il n'est pas possible d garantir que la clé publique d'un client est légitime.
 +
 +L'utilisation d'un certificat ajoute des informations d'identité et ce certificat est signé par une autorité de certification reconnue. 
 +
 +La signature du certificat est un haché des données du certificat chiffrée par la clé privée de l'autorité de certification reconnue.
 +
 +En utilisant la clé publique de l'autorité de certification reconnue, il est possible de déchiffrer la signature et de comparer ensuite les hachés.
 +
 +===== Génération des certificats OpenSSH =====
 +OpenSSH permet de générer des certificat spécifiques à OpenSSH. Ce ne sont pas des certificats x509 utilisés avec SSL/TLS (https, sftp, etc.)
 +
 +La création d'un certificat utilisateur ou serveur nécessite la signature par une clé privée qui représente alors l'autorité de certification.
 +
 +
 +
 +<WRAP center round info>
 +L'autorité de certification (CA) doit être hébergée sur le serveur très sécurisé, et de manière idéale, offline quand il n'est pas utilisé.
 +</WRAP>
 +
 +Pour cette démarche, la CA sera hébergée sur le serveur distant.
 +
 +==== création de la clé privée sur le serveur distant avec le nom ca\_key ====
 +
 +<code>
 +$ ssh-keygen -f ca_key -C "SSH cle privee de la CA"
 +</code>
 +
 +
 +Cela génère 2 fichiers : 
 +  * ca_key :  clé privée de la CA
 +  * ca_key.pub : clé publique de la CA
 +
 +==== Création d'un certificat pour le client ====
 +
 +Pour la création du certificat du client, il est nécessaire de préciser : 
 +   * -s : la clé privée de la CA qui signe le certificat
 +   * -I : l'identifiant du certificat client. Pour l'exemple un utilisateur appelé charles.
 +   * -n :  le login autorisé pour ce client sur le serveur. Il s'agit dans l'exemple du compte linux sio. 
 +   * -V : la validité du certificat. En général une année.
 +   * la clé publique de l'utilisateur qui est nécessaire pour créer son certificat 
 +
 +  * Transférez sur le serveur de CA la clé publique de l'utilisateur :  
 +
 +<code>
 +$ scp ~/.ssh/id_ed25519.pub sio@adresseIPCA:/home/sio
 +</code>
 +
 +  * Sur le serveur de CA, utilisez la commande suivante : 
 +
 +<code>
 +$ ssh-keygen -s ca_key -I CLIENT-CHARLES -n sio -V +365d id_ed52519.pub
 +</code>
 +
 +Le certificat a été généré et le fichier obtenu porte le nom de la clé publique en ajoutant -cert.
 +
 +La commande suivant permet de visualiser le contenu du certificat : 
 +<code>
 +$ ssh-keygen -L -f id_ed25519-cert.pub
 +id_ed25519-cert.pub:
 +        Type: ssh-ed25519-cert-v01@openssh.com user certificate
 +        Public key: ED25519-CERT SHA256:q3u+woluMmljCo+HCKHr55oztAiZ7QVDXWkw20W02UY
 +        Signing CA: ED25519 SHA256:5R5DL2MZrQelfe88lyf2zdv3UepovFcdm9NiHtplWUQ (using ssh-ed25519)
 +        Key ID: "CLIENT-CHARLES"
 +        Serial: 0
 +        Valid: from 2026-06-28T20:27:00 to 2027-06-28T20:28:40
 +        Principals: 
 +                sio
 +        Critical Options: (none)
 +        Extensions: 
 +                permit-X11-forwarding
 +                permit-agent-forwarding
 +                permit-port-forwarding
 +                permit-pty
 +                permit-user-rc
 +
 +</code>
 +
 +Remarques : 
 +    * il s'agit d'un certificat utilisateur : Type user certificate
 +    * ce n'est pas un certificat autosigné car l'empreintes de la clé publique de l'utilisateur (Public Key) est différente de l'empreinte de la clé qui a signé le certificat (Signing CA).
 +    * le principal est sio, c'est à dire le login associé à ce certificat
 +
 + * Transférez sur le client le certificat client nouvellement généré et placez le dans le dossier .ssh de l'ordinateur client avec la clé privée id\_ed25519 et la clé publique ed\_ed25519.pub :  
 +
 +<code>
 +$ scp sio@adresseIPCA:/home/sio/id_ed25519-cert.pub ~/.ssh/ 
 +</code>
 +
 +==== Création du certificat pour le serveur distant ====
 +
 +Pour la création du certificat du serveur il est nécessaire de préciser : 
 +   * -s : la clé privée de la CA qui signe le certificat
 +   * -I : l'identifiant du certificat client. Pour l'exemple un utilisateur appelé charles.
 +   * -h : précise qu'il s'agit d'un certificat serveur. 
 +   * -n : les noms / adresse IP du serveur.
 +   * -V : la validité du certificat. En général une année.
 +   * la clé publique du serveur situé dans le dossier /etc/ssh qui est nécessaire pour créer son certificat 
 +
 +  * Sur le serveur de CA, utilisez la commande suivante, en utilisant sudo afin que le certificat puisse être sauvegardé dans le dossier /etc/ssh : 
 +
 +<code>
 +$ sudo ssh-keygen -s ca_key -I SERVEUR-LOCAL -h -n localhost,127.0.0.1,adresseIP -V +365d /etc/ssh/ssh_host_ed25519_key.pub
 +</code>
 +
 +
 +La commande suivante permet de visualiser le contenu du certificat serveur : 
 +<code>
 +$ ssh-keygen -L -f /etc/ssh/ssh_host_ed25519_key-cert.pub
 +/etc/ssh/ssh_host_ed25519_key-cert.pub:
 +        Type: ssh-ed25519-cert-v01@openssh.com host certificate
 +        Public key: ED25519-CERT SHA256:++xMosJ1oo91GoxCV77GSb7tSBzKqKVvY2kDXvXzBr0
 +        Signing CA: ED25519 SHA256:5R5DL2MZrQelfe88lyf2zdv3UepovFcdm9NiHtplWUQ (using ssh-ed25519)
 +        Key ID: "SERVEUR-LOCAL"
 +        Serial: 0
 +        Valid: from 2026-06-28T20:58:00 to 2027-06-28T20:59:19
 +        Principals: 
 +                localhost
 +                127.0.0.1
 +                adresseIP
 +        Critical Options: (none)
 +        Extensions: (none)
 +
 +</code>
 +
 +Remarques : 
 +    * il s'agit d'un certificat utilisateur : Type host certificate
 +
 +  * Configuration du serveur SSH pour utiliser ce certificat en modifiant le fichier **/etc/ssh/sshd_config** : 
 +
 +<code>
 +...
 +HostKey /etc/ssh/ssh_host_ed25519_key
 +HostCertificate /etc/ssh/ssh_host_ed25519_key-cert.pub
 +...
 +</code>
 +
 +  * lançez manuellement le serveur en mode debug, pour visualiser qu'il charge bien les 2 fichiers (la clé privée et le certificat) :
 +
 +<code>
 +$  sudo /usr/sbin/sshd -d
 +sudo /usr/sbin/sshd -d
 +</code>
 +
 +  * redémarrez le service SSH
 +
 +<code>
 +$ sudo systemctl restart ssh
 +</code>
 +
 +==== Configuration du client pour pour vérifier le certificat du serveur ====
 +
 +    * transférez le fichier de la clé publique de la CA au client afin de disposer de son contenu : 
 +    * 
 +
 +Il est nécessaire d'ajouter la directive **@cert-authority** dans le fichier **~/.ssh/known\_hosts** du client en précisant la clé publique de la CA :
 +
 +<code>
 +$ scp sio@adresseIPCA:/home/sio/ca_key.pub ~/.ssh/ 
 +</code>
reseau/certificat/certificatsopenssh.1782668048.txt.gz · Dernière modification : 2026/06/28 19:34 de techer.charles_educ-valadon-limoges.fr