Outils pour utilisateurs

Outils du site


reseau:debian:clesshcertificat

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:debian:clesshcertificat [2025/01/07 23:06] – [Les commandes utiles] techer.charles_educ-valadon-limoges.frreseau:debian:clesshcertificat [2025/06/19 17:26] (Version actuelle) – [Notes] admin
Ligne 1: Ligne 1:
 ====== Configurer une authentification SSH avec certificat ====== ====== Configurer une authentification SSH avec certificat ======
 +===== Resources =====
 +  * http://www.ixany.org/fr/articles/presentation-et-utilisation-des-certificats-ssh/
 +  * https://www.ssh.com/
 +  * http://tech.ciges.net/blog/openssh-with-x509-certificates-how-to/
 +  * https://linux-attitude.fr/post/certificats-x509-pour-ssh
 +  * https://ichi.pro/fr/comment-utiliser-les-certificats-ssh-pour-un-acces-serveur-evolutif-securise-et-plus-transparent-125389551658519
 ===== Principes ===== ===== Principes =====
  
Ligne 74: Ligne 80:
 </code> </code>
  
-Vous pouvez utiliser aussi le fichier de configuraito du client ssh+Vous pouvez utiliser aussi le fichier de configuration du client ssh
 <code> <code>
 Host <nom_du_serveur>  Host <nom_du_serveur> 
Ligne 130: Ligne 136:
 </code> </code>
  
 +  * Facilité d’utilisation avec plusieurs serveurs en faisant confiance à la même CA en ajoutant la clé publique de la CA à ~/.ssh/known_hosts en tant qu’autorité de certification :
  
 +
 +<code>
 +echo "@cert-authority *.example.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQE..." >> ~/.ssh/known_hosts
 +</code>
 +
 +Cela permet au client de faire confiance à tous les serveurs avec des certificats signés par cette CA.
 +
 +  * Visualiser le contenu d'un certificat
 +
 +<code>
 +openssl x509 -in filename.pem -text –noout
 +</code>
 +-noout pour ne pas afficher en base64 qui permet d’encode des données binaires ASCII
 +
 +  * emetteur du certificat : -issuer
 +
 +<code>
 +openssl x509 -in filename.pem -issuer –noout
 +</code>
 +
 +  * Sujet du certificat : -subject
 +
 +<code>
 +openssl x509 -in filename.pem -subject –noout
 +</code>
 +
 +  * Empreinte digitale : -fingeprint
 +
 +<code>
 +openssl x509 -in filename.pem -fingerprint –noout
 +</code>
 +
 +  * Clé publique : -pubkey 
 +
 +<code>
 +openssl x509 -in filename.pem –pubkey -noout –out id_rsa.pub
 +</code>
 +
 +=====  Notes =====
 +Configurer une authentification SSH avec des certificats (et non simplement des clés publiques/privées) est une méthode avancée qui repose sur un serveur d'autorité de certification (CA) pour signer les clés SSH. Voici un guide étape par étape pour mettre cela en place :
 +
 +1. Générer une paire de clés pour l'utilisateur
 +Sur la machine client (utilisateur) :
 +
 +<code>
 +ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_cert
 +</code>
 +
 +Cela crée :
 +  * id_rsa_cert (clé privée)
 +  * id_rsa_cert.pub (clé publique)
 +
 + 2. Créer une autorité de certification (CA)
 +Sur la machine administrateur (ou serveur CA) :
 +
 +<code>
 +ssh-keygen -f /etc/ssh/ssh_ca -C "CA for SSH" -N ""
 +
 +</code>
 +
 +Cela crée :
 +  * /etc/ssh/ssh_ca (clé privée de la CA)
 +  * /etc/ssh/ssh_ca.pub (clé publique de la CA)
 +
 + 3. Signer la clé publique de l'utilisateur
 +Toujours sur la machine CA :
 +
 +<code>
 +ssh-keygen -s /etc/ssh/ssh_ca -I user_cert -n nom_utilisateur -V +52w ~/.ssh/id_rsa_cert.pub
 +</code>
 +
 +  * -I : identifiant du certificat
 +  * -n : nom d'utilisateur autorisé
 +  * -V : durée de validité (ici 52 semaines)
 +
 +Cela génère un fichier id_rsa_cert-cert.pub.
 +
 +Visualiser le contenu du certificat : 
 +<code>
 +ssh-keygen -L -f id_rsa_cert.pub
 +</code>
 +
 +
 + 4. Configurer le serveur SSH pour accepter les certificats
 +Sur le serveur SSH (où l'utilisateur veut se connecter), ajoutez dans /etc/ssh/sshd_config :
 +
 +<code>
 +TrustedUserCAKeys /etc/ssh/ssh_ca.pub
 +</code>
 +
 +Puis redémarrez le service SSH :
 +
 +<code>
 +sudo systemctl restart sshd
 +
 +</code>
 +
 +5. Configurer le client SSH
 +Sur la machine client, dans ~/.ssh/config :
 +
 +<code>
 +Host monserveur
 +    HostName monserveur.exemple.com
 +    User nom_utilisateur
 +    IdentityFile ~/.ssh/id_rsa_cert
 +    CertificateFile ~/.ssh/id_rsa_cert-cert.pub
 +
 +</code>
 +
 + 6. Connexion
 +
 +<code>
 +ssh monserveur
 +
 +</code>
 +
 +Script Bash automatisé pour configurer une authentification SSH avec des certificats :
 +
 +
 +
 +Ce que fait le script :
 +  * Génère une paire de clés RSA pour l'utilisateur.
 +  * Crée une autorité de certification (CA) SSH.
 +  * Signe la clé publique de l'utilisateur avec la CA.
 +  * Configure le serveur SSH pour faire confiance à la CA.
 +  * Crée un fichier ~/.ssh/config pour simplifier la connexion.
 +
 +Utilisation :
 +  * Télécharge le script.
 +  * Rendre exécutable :
 +
 +<code>
 +chmod +x configurer_authentification_ssh.sh
 +</code>
 +
 +  * contenu du script : 
 +<code>
 +#!/bin/bash
 +==== Script d'automatisation de l'authentification SSH avec certificat ====
 +s
 +# À exécuter avec les droits root ou sudo
 +
 +# === Étape 1 : Générer une paire de clés pour l'utilisateur ===
 +echo "[1/5] Génération de la paire de clés utilisateur..."
 +USER_KEY_DIR="$HOME/.ssh"
 +USER_KEY_NAME="id_rsa_cert"
 +mkdir -p "$USER_KEY_DIR"
 +ssh-keygen -t rsa -b 4096 -f "$USER_KEY_DIR/$USER_KEY_NAME" -N ""
 +
 +# === Étape 2 : Créer une autorité de certification (CA) ===
 +echo "[2/5] Création de l'autorité de certification..."
 +CA_DIR="/etc/ssh"
 +CA_KEY_NAME="ssh_ca"
 +sudo ssh-keygen -f "$CA_DIR/$CA_KEY_NAME" -C "CA for SSH" -N ""
 +
 +# === Étape 3 : Signer la clé publique de l'utilisateur ===
 +echo "[3/5] Signature de la clé publique utilisateur..."
 +CERT_ID="user_cert"
 +USERNAME="$(whoami)"
 +VALIDITY="+52w"
 +sudo ssh-keygen -s "$CA_DIR/$CA_KEY_NAME" -I "$CERT_ID" -n "$USERNAME" -V "$VALIDITY" "$USER_KEY_DIR/$USER_KEY_NAME.pub"
 +
 +# === Étape 4 : Configurer le serveur SSH pour accepter les certificats ===
 +echo "[4/5] Configuration du serveur SSH..."
 +sudo bash -c "echo 'TrustedUserCAKeys $CA_DIR/$CA_KEY_NAME.pub' >> /etc/ssh/sshd_config"
 +sudo systemctl restart sshd
 +
 +# === Étape 5 : Créer un fichier de configuration SSH côté client ===
 +echo "[5/5] Création du fichier de configuration SSH client..."
 +CONFIG_FILE="$USER_KEY_DIR/config"
 +SERVER_ALIAS="monserveur"
 +SERVER_HOST="monserveur.exemple.com"
 +
 +cat <<EOF > "$CONFIG_FILE"
 +Host $SERVER_ALIAS
 +    HostName $SERVER_HOST
 +    User $USERNAME
 +    IdentityFile $USER_KEY_DIR/$USER_KEY_NAME
 +    CertificateFile $USER_KEY_DIR/${USER_KEY_NAME}-cert.pub
 +EOF
 +
 +chmod 600 "$CONFIG_FILE"
 +
 +echo " Configuration terminée. Vous pouvez maintenant vous connecter avec : ssh $SERVER_ALIAS"
 +
 +</code>
reseau/debian/clesshcertificat.1736287562.txt.gz · Dernière modification : 2025/01/07 23:06 de techer.charles_educ-valadon-limoges.fr