Archives par étiquette : AC

Mise en place d’une Autorité de Certification SSH

0. Préambule

0.1. Présentation

Nous allons permettre à un utilisateur (user) d'utiliser un client SSH pour se connecter à un serveur SSH (host) puis de s'authentifier grâce à une paire de clé.

Ces opérations (connexion puis authentification) seront validées par une chaine de certification.

Dans cette documentation, l'utilisateur test@srvbackup01.info.lan va se connecter en tant que transfert@srvapache01.info.lan grâce à sa paire de clés RSA.

0.2. Pré-requis

Nous avons besoin de 3 ordinateurs :

  • srvauth01.info.lan = Autorité de Certification SSH
  • srvapache01.info.lan = Serveur SSH
  • srvbackup01.info.lan = Client SSH

Nous avons besoin que la résolution DNS soit fonctionnelle sur tous les ordinateurs.

Nous avons besoin d'au minimum 5 utilisateurs :

  • root@srvauth01.info.lan = administrateur de la machine
  • root@srvapache01.info.lan = administrateur de la machine
  • test@srvapache01.info.lan = utilisateur de test
  • root@srvbackup01.info.lan = administrateur de la machine
  • test@srvbackup01.info.lan = utilisateur de test

1. Création de l'Autorité de Certification (AC)

Nous allons créer une chaine de certification pour les hosts (serveurs) et une chaine de certification pour les users (utilisateurs).

1.1. Préparation de l'espace de travail de l'autorité de certification

Nous ouvrons une session root@srvauth01.info.lan

Nous créons un dossier ssh_ca dans le dossier home de l'utilisateur root (/root)

mkdir /root/ssh_ca/

1.2. Génération des paires de clés

Nous allons générer une paire de clés pour la chaine de certification des hosts (serveurs) et une paire de clés pour la chaine de certification des users (utilisateurs) .

1.2.1. Chaine HOSTS

Nous générons une paire de clés RSA 2048 bits :

ssh-keygen -t rsa -b 2048 -f /root/ssh_ca/ssh_ca_hosts_rsa_key -C "AC HOSTS"

Une clé privée (format standard) est générée dans le fichier ssh_ca_hosts_rsa_key
Une clé publique (format SSH) est générée dans le fichier ssh_ca_hosts_rsa_key.pub

1.2.2. Chaine USERS

Nous générons une paire de clés RSA 2048 bits :

ssh-keygen -t rsa -b 2048 -f /root/ssh_ca/ssh_ca_users_rsa_key -C "AC USERS"

Une clé privée (format standard) est générée dans le fichier ssh_ca_users_rsa_key
Une clé publique (format SSH) est générée dans le fichier ssh_ca_users_rsa_key.pub

1.3. Création des certificats "racine"

Nous allons auto-signer des certificats "racine" avec les clés générées précédemment

1.3.1. Chaine HOSTS

Génération d'un certificat depuis la clé publique de l'AC HOSTS :

ssh-keygen -s /root/ssh_ca/ssh_ca_hosts_rsa_key -I ca_hosts -h -n srvauth01.info.lan -V +52w /root/ssh_ca/ssh_ca_hosts_rsa_key.pub

Un certificat SSH est généré dans le fichier ssh_ca_hosts_rsa_key-cert.pub

1.3.2. Chaine USERS

Génération d'un certificat depuis la clé publique de l'AC USERS :

ssh-keygen -s /root/ssh_ca/ssh_ca_users_rsa_key -I ca_users -h -n srvauth01.info.lan -V +52w /root/ssh_ca/ssh_ca_users_rsa_key.pub

Un certificat SSH est généré dasn le fichier ssh_ca_users_rsa_key-cert.pub

2. Configuration des hosts (serveurs SSH)

Nous allons générer un certificat SSH par host puis nous allons lui indiquer comment vérifier les hosts et les users.

2.1. Installation des chaines de certification

2.1.1. Génération du certificat d'hote

Nous ouvrons une session root@srvauth01.info.lan

Nous allons préparer les fichiers nécessaires à la configuration de srvapache01.info.lan

Création d'un dossier de travail :

mkdir /root/ssh_ca/srvapache01.info.lan/

Récupération de la clé publique :

scp root@srvapache01.info.lan:/etc/ssh/ssh_host_rsa_key.pub /root/ssh_ca/srvapache01.info.lan/

Création du certificat :

ssh-keygen -s /root/ssh_ca/ssh_ca_hosts_rsa_key -I host_srvapache01 -h -n srvapache01.info.lan -V +52w /root/ssh_ca/srvapache01.info.lan/ssh_host_rsa_key.pub

2.1.2. Installation du certificat d'hote et de la clé publique de vérification des utilisateurs

Nous ouvrons une session root@srvauth01.info.lan

Copie du certificat sur l'hôte :

scp /root/ssh_ca/srvapache01.info.lan/ssh_host_rsa_key-cert.pub root@srvapache01.info.lan:/etc/ssh/

Copie de la clé publique de l'AC USERS sur l'hôte :

scp /root/ssh_ca/ssh_ca_users_rsa_key.pub root@srvapache01.info.lan:/etc/ssh/

2.2. Configuration des serveurs SSH (SSHD)

Nous ouvrons une session root sur srvapache01.info.lan et sur srvbackup01.info.lan

Modification de la configuration de SSHD :

vi /etc/ssh/sshd_config

Nous devons indiquer au serveur SSH où trouver son certificat :

HostCertificate /etc/ssh/ssh_host_rsa_key-cert.pub

Nous devons indiquer au serveur SSH où trouver la clé publique permettant de vérifier les certificats des utilisateurs :

TrustedUserCAKeys /etc/ssh/ssh_ca_users_rsa_key.pub

Redémarrage du service :

service ssh restart

3. Configuration de la partie "client"

3.1. Génération du certificat utilisateur depuis l'AC

Nous allons préparer les fichiers nécessaires à l'authentification de test@srvbackup01.info.lan

Nous ouvrons une session root@srvauth01.info.lan

Création d'un dossier de travail :

mkdir -p /root/ssh_ca/srvbackup01.info.lan/test/

Récupération de la clé publique :

scp test@srvbackup01.info.lan:/home/test/.ssh/id_rsa.pub /root/ssh_ca/srvbackup01.info.lan/test/

Création du certificat :

ssh-keygen -s /root/ssh_ca/ssh_ca_users_rsa_key -I test_user -n test -V +52w /root/ssh_ca/srvbackup01.info.lan/test/id_rsa.pub

Copie du certificat dans le profil de l'utilisateur :

scp /root/ssh_ca/srvbackup01.info.lan/test/id_rsa-cert.pub test@srvbackup01.info.lan:/home/test/.ssh/

3.2. Configuration du client SSH (déclaration de l'AC HOSTS)

Nous allons indiquer au client SSH comment vérifier le certificat du serveur SSH. Pour cela nous allons designer la clé publique de l'AC HOSTS comme @cert-authority de *.info.lan.

Il suffit d'ajouter la ligne suivante dans le fichier known_hosts de l'utilisateur (~/.ssh/known_hosts) ou de l'ordinateur (/etc/ssh/ssh_known_hosts) :

@cert-authority *.info.lan <clé publique SSH de l'AC HOSTS>

3.2.1. Génération d'un fichier known_hosts de référence

Nous ouvrons une session root@srvauth01.info.lan

printf "@cert-authority *.info.lan $(cat /root/ssh_ca/ssh_ca_hosts_rsa_key.pub)" > /root/ssh_ca/known_hosts

3.2.2. Ajout de l'AC HOSTS pour un utilisateur

Nous ouvrons une session root@srvauth01.info.lan

Remplacement du fichier known_hosts de l'utilisateur test@srvbackup01.info.lan

scp /root/ssh_ca/known_hosts test@srvbackup01.info.lan:/home/test/.ssh/

3.2.3. Ajout de l'AC HOSTS pour un ordinateur

Nous ouvrons une session root@srvauth01.info.lan

Remplacement du fichier ssh_known_hosts de srvbackup01.info.lan

scp /root/ssh_ca/known_hosts root@srvbackup01.info.lan:/etc/ssh/ssh_known_hosts

Nous pouvons changer l'emplacement de ce fichier en modifiant la directive GlobalKnownHostsFile du fichier /etc/ssh/ssh_config :

GlobalKnownHostsFile /etc/ssh/known_hosts