Comment créer une autorité de certification (CA) sur Ubuntu 20.04

L’autorité de certification (CA) est une entité chargée de délivrer des certificats numériques pour sécuriser la communication. Il agit en tant que tiers de confiance pour le propriétaire du certificat et la partie s’appuyant sur le certificat.

L’entité d’autorité de certification peut être publique ou privée. Les autorités de certification publiques sont couramment utilisées pour vérifier l’identité des sites Web et les autorités de certification privées sont utilisées pour générer des certificats pour un VPN client à site, des utilisateurs, des serveurs internes ou des programmes et services individuels au sein de votre infrastructure, tels que des serveurs Web locaux.

Dans ce tutoriel, nous apprenons à créer un autorité de certification privée (CA) au Ubuntu 20.04. Ici, nous utilisons facile-rsa Utilitaire CLI pour créer et gérer le serveur CA.

Conditions préalables

  • Un nœud avec Ubuntu 20.04 pour héberger le serveur CA
  • Un utilisateur avec sudo privilège

Étape 1 : Mettez à jour votre système

Tout d’abord, mettez à jour votre système Ubuntu, exécutez la commande suivante :

apt update

Vous pouvez ignorer cette étape si vous installez easy-rsa à partir du référentiel officiel.

Étape 2 : Installer Easy-RSA sur le serveur CA

Easy-RSA est un outil en ligne de commande qui facilite considérablement la mise en place d’une autorité de certification (CA) et la gestion des certificats. Il génère une clé privée et un certificat racine public.

Easy-RSA est disponible dans le référentiel apt par défaut. Pour avoir la dernière version installée à partir de l’officiel Easy-rsa GitHub dépôt.

Téléchargez l’outil de gestion Easy-RSA PKI depuis Github :

wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz

Ici ont téléchargé la version 3.0.8. Déplaçons maintenant le fichier dans le /opt dossier

sudo mv EasyRSA-3.0.8.tgz /opt

Maintenant, changez de répertoire en /opt :

cd /opt

Exécutez la commande suivante pour décompresser le fichier .tgz :

sudo tar xvf EasyRSA-3.0.8.tgz

Renommez le répertoire à l’aide de la commande mv :

sudo mv EasyRSA-3.0.8 easy-rsa

Maintenant, faites de l’utilisateur non root le propriétaire du répertoire :

sudo chown -R franck:franck easy-rsa/

Restreindre l’accès au répertoire PKI, uniquement pour le propriétaire :

sudo chmod 700 easy-rsa

Étape 3 : configuration du serveur CA

Ici, nous allons configurer le répertoire d’infrastructure de clé publique et créer un certificat public/privé pour le serveur CA.

Changez maintenant le répertoire en easy-rsa qui a été créé précédemment :

cd easy-rsa

Nous allons créer un vars fichier qui sera utilisé pour stocker les informations de l’organisation

$ cp vars.example vars

Ajoutez maintenant les informations d’organisation à la fin du fichier

$ vim vars

set_var EASYRSA_REQ_COUNTRY "CM"
set_var EASYRSA_REQ_PROVINCE "Centre"
set_var EASYRSA_REQ_CITY "Yaounde"
set_var EASYRSA_REQ_ORG "LINUXSHARE"
set_var EASYRSA_REQ_EMAIL "[email protected]"
set_var EASYRSA_REQ_OU "Com"
set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"

Nous allons maintenant initialiser le répertoire Public Key Infrastructure :

$ ./easyrsa init-pki

Note: using Easy-RSA configuration from: /opt/easy-rsa/vars
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /opt/easy-rsa/pki

Pour générer le racine publique et paire de clés privées pour le serveur CA, tapez :

$ ./easyrsa build-ca

Note: using Easy-RSA configuration from: /opt/easy-rsa/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020
Enter New CA Key Passphrase:
Re-Enter New CA Key Passphrase:
read EC key
writing EC key
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/opt/easy-rsa/pki/ca.crt

Il vous sera demandé de saisir une phrase secrète pour la paire de clés chaque fois que vous devrez signer ou révoquer un certificat. Il vous sera également demandé le Common Name (CN) de votre CA, vous pouvez utiliser celui par défaut si vous le souhaitez.

L’opération va créer deux fichiers principaux :

  • le certificat public déposer ca.crt fichier que les serveurs et les clients utiliseront pour vérifier qu’ils sont sur le même périmètre de confiance
  • le Clé privée déposer ca.key dans le pki/private annuaire que l’AC utilise pour signer les certificats des serveurs et des clients

Étape 4 : importer le certificat public de l’autorité de certification

Maintenant que nous avons généré le certificat public, nous devons l’importer sur un autre serveur.

Connectez-vous au serveur sur lequel vous souhaitez importer le certificat, puis effectuez une copie à distance de ca.crt fichier du serveur CA.

scp [email protected]:/opt/easy-rsa/pki/ca.crt

The authenticity of host 'X.Y.Z.T (X.Y.Z.T)' can't be established.
ECDSA key fingerprint is SHA256:ffUgP5/d0Z3miOKqxBVoF9JbFvIZFs/gxr7ESBZ0kmQ.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '139.177.204.145' (ECDSA) to the list of known hosts.
[email protected]'s password:
ca.crt
100% 749 2,4 Ko/s 00:00

Déplacez le fichier de certificat vers le /usr/local/share/ca-certificates/ annuaire:

sudo mv ca.crt /usr/local/share/ca-certificates/

Importez maintenant le certificat du serveur CA à l’aide de la commande suivante :

sudo update-ca-certificates

Updating certificates in /etc/ssl/certs…
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d…
done.

Avec cela, votre serveur fera désormais confiance aux certificats qui ont été signés par votre serveur CA.

Étape 5 : Créez la demande de certificat de serveur et la clé privée

Nous pouvons créer des demandes de signature de certificat (CSR) sur un serveur différent pour que notre autorité de certification signe ces demandes.

Nous utiliserons OpenSSL pour créer le fichier CSR. Si OpenSSL n’est pas installé, utilisez la commande suivante pour l’installer :

sudo apt install openssl

Créez un répertoire nommé server1-csr pour conserver la CSR et la clé privée

mkdir server1-csr

Passer au répertoire server1-csr

cd server1-csr

Générez maintenant la clé privée à l’aide d’OpenSSL :

openssl genrsa -out server1.key

Generating RSA private key, 2048 bit long modulus (2 primes)
..........+++++
..................................................+++++
e is 65537 (0x010001)

Vous pouvez générer le CSR correspondant à l’aide de la clé générée :

$ openssl req -new -key server1.key -out server1.req

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CM
State or Province Name (full name) [Some-State]:CE
Locality Name (eg, city) []:Yaounde
Organization Name (eg, company) [Internet Widgits Pty Ltd]:LinuxShare
Organizational Unit Name (eg, section) []:Tech-B
Common Name (e.g. server FQDN or YOUR name) []:server1
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Vous devez maintenant copier le fichier CSR sur le serveur CA :

$ scp server1.req scp [email protected]:/tmp/server1.req

Étape 6 : Signez le CSR du serveur sur le serveur CA

Le CSR généré doit être signé par le serveur CA. Pour cela, accédez d’abord au répertoire easy-rsa pour importer la demande de signature de certificat du serveur.

./easyrsa import-req /opt/sign-cert/server1.req server1

Note: using Easy-RSA configuration from: /opt/easy-rsa/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020
The request has been successfully imported with a short name of: server1
You may now use this name to perform signing operations on this request.

Signez maintenant le CSR à l’aide de la commande suivante :

./easyrsa sign-req server server1

Note: using Easy-RSA configuration from: /opt/easy-rsa/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020
You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.
Request subject, to be signed as a server certificate for 825 days:
subject=
countryName = CM
stateOrProvinceName = CE
localityName = Yaounde
organizationName = LinuxShare
organizationalUnitName = Tech-B
commonName = server1
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /opt/easy-rsa/pki/easy-rsa-161486.BI2HwH/tmp.lIqZoF
Enter pass phrase for /opt/easy-rsa/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'CM'
stateOrProvinceName :ASN.1 12:'CE'
localityName :ASN.1 12:'Yaounde'
organizationName :ASN.1 12:'LinuxShare'
organizationalUnitName:ASN.1 12:'Tech-B'
commonName :ASN.1 12:'server1'
Certificate is to be certified until Jan 5 16:57:26 2024 GMT (825 days)
Write out database with 1 new entries
Data Base Updated
Certificate created at: /opt/easy-rsa/pki/issued/server1.crt

À partir de la sortie, vous pouvez voir le certificat émis sous le répertoire /opt/easy-rsa/pki/issued/. Vous pouvez également vérifier le certificat en le répertoriant :

$ ls -l /opt/easy-rsa/pki/issued

Sortir:

total 4
-rw------- 1 franck franck 3996 Oct 2 16:57 server1.crt

Avec toutes ces étapes, vous êtes capable de gérer vous-même vos certificats pour vos serveurs internes. Avec votre serveur CA, vous pouvez signer les certificats de vos serveurs web ou d’un tunnel VPN pour example avec OpenVPN.

Remarque : pour des raisons de sécurité, il est recommandé de ne pas exécuter d’autres services sur un serveur CA. Il ne doit être utilisé que pour importer, signer et révoquer les demandes de certificat en tant que serveur autonome.

Conclusion

Dans ce didacticiel, nous avons appris à créer une autorité de certification privée (CA) sur Ubuntu 20.04. Merci d’avoir lu, s’il vous plaît fournir vos commentaires et suggestions dans la section des commentaires.