Comment installer et configurer une autorité de certification (CA) sur Docker
Introduction
Qu’est-ce qu’une PKI ?
Une PKI (Infrastructure à Clés Publiques) est un ensemble de protocoles, de politiques et de procédures qui permettent de gérer les clés de chiffrement et de certificats numériques pour assurer l’authentification, la confidentialité et l’intégrité des communications électroniques. La PKI repose sur une structure en arborescence, avec une Autorité de Certification Racine (AC Racine) et des Autorités de Certification Intermédiaires (AC Inter). Les AC Racine et Inter délivrent des certificats aux entités (serveurs, clients) afin de valider leur identité.
Easy-RSA
Easy-RSA est un ensemble de scripts qui facilite la création et la gestion d’une PKI. Il est souvent utilisé avec OpenVPN pour générer des certificats pour les serveurs et les clients. Dans cet article, nous allons expliquer étape par étape comment configurer une PKI avec Easy-RSA.
Mise en place du Lab
Pour tester les différents aspects de la mise en oeuvre de la PKI, nous allons mettre en place une infrastructure via docker
et un fichier docker-compose
Un des container
servira de Root CA
, le deuxième de CA Intermédiaire
(SubCA) et le troisième de client.
En pratique, le serveur root CA
ne servira qu’a créer les certificats pour les SubCA
et doit être mit hors ligne pour des raisons de sécurités. Toute compromition de ce serveur mettrait en péril toute l’infrastructure basée sur les certificats émis par les SubCA
s’y rattachant.
Dans tout le reste de ce guide:
- Les termes de Root CA, CA Primaire, CA Principale désignent tous la même fonctionnalité. L’authorité de certification principale.
- Le terme de SubCA désignera l’AC Intermédiaire
- Les termes de client, serveur, désignent tous la même fonctionnalité, un certificat qui sera émis à partir de la
SubCA
L’idée est d’utiliser l’imagedocker
openssh-server de linuxio et de la modifier pour y ajouter la partieeasyrsa
Arborescence du projet.
# tree -d -L 3
.
|-- docker-openssh-server # Répertoire du clone GitHub de linuxio
| `-- root
|-- server_CA # Répertoire du server Root CA
| |-- PKI
| `-- ssh_config
|-- server_subCA # Répertoire du serveur CA Intermédiaire (SubCA)
| |-- PKI
| `-- ssh_config
`-- server3 # Répertoire d'un client
|-- PKI
`-- ssh_config
Création de l’image easyrsa
On créé un répertoire pour héberger notre LAB.
# mkdir -p LAB && cd ./LAB
On clone le dépot GitHub du LAB sur GitHub
/LAB # git clone https://github.com/patlegu/PKI_docker_install.git
Cloning into 'PKI_docker_install'...
remote: Enumerating objects: 7, done.
remote: Counting objects: 100% (7/7), done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 7 (delta 0), reused 4 (delta 0), pack-reused 0
Receiving objects: 100% (7/7), done.
Nous allons ensuite avoir besoin du créer notre image Docker
de base. Comme décrit plus haut, nous partons de celle de Linuxio
On va cloner le dépot docker-openssh-server dans notre répertoire LAB:
# git clone https://github.com/linuxserver/docker-openssh-server.git
Cloning into 'docker-openssh-server'...
remote: Enumerating objects: 1077, done.
remote: Counting objects: 100% (479/479), done.
remote: Compressing objects: 100% (202/202), done.
remote: Total 1077 (delta 287), reused 414 (delta 248), pack-reused 598
Receiving objects: 100% (1077/1077), 220.12 KiB | 5.95 MiB/s, done.
Resolving deltas: 100% (589/589), done.
Nous avons actuellement la structure suivante dans notre LAB
/LAB/PKI_docker_install # ll
total 16
-rw-r--r-- 1 root root 1335 Aug 3 16:12 Dockerile.LAB
-rw-r--r-- 1 root root 1064 Aug 3 16:12 LICENSE
-rw-r--r-- 1 root root 2274 Aug 3 16:12 docker-compose.yaml
drwxr-xr-x 5 root root 4096 Aug 3 16:15 docker-openssh-server
On prépare notre image Docker
Soit en modifiant le Dockerfile
On modifie ensuite le fichier docker-openssh-server\Dockerfile
comme ci-dessous
Fichier Dockerfile modifié
# syntax=docker/dockerfile:1
FROM ghcr.io/linuxserver/baseimage-alpine:3.18
# set version label
ARG BUILD_DATE
ARG VERSION
ARG OPENSSH_RELEASE
LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}"
LABEL maintainer="aptalca"
RUN \
echo "**** install runtime packages ****" && \
apk add --no-cache --upgrade \
logrotate \
nano \
netcat-openbsd \
sudo \
easy-rsa \
&& ln -s /usr/share/easy-rsa/easyrsa /usr/bin/easyrsa && \
echo "**** install openssh-server ****" && \
if [ -z ${OPENSSH_RELEASE+x} ]; then \
OPENSSH_RELEASE=$(curl -sL "http://dl-cdn.alpinelinux.org/alpine/v3.18/main/x86_64/APKINDEX.tar.gz" | tar -xz -C /tmp && \
awk '/^P:openssh-server-pam$/,/V:/' /tmp/APKINDEX | sed -n 2p | sed 's/^V://'); \
fi && \
apk add --no-cache \
openssh-client==${OPENSSH_RELEASE} \
openssh-server-pam==${OPENSSH_RELEASE} \
openssh-sftp-server==${OPENSSH_RELEASE} && \
echo "**** setup openssh environment ****" && \
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/g' /etc/ssh/sshd_config && \
usermod --shell /bin/bash abc && \
rm -rf \
/tmp/* \
$HOME/.cache
ENV EASYRSA="/usr/share/easy-rsa" EASYRSA_PKI="/data/pki"
# add local files
COPY /root /
EXPOSE 2222
VOLUME /config /data
WORKDIR /data
Soit en recopiant le Dockerfile du dépot du LAB
/LAB/PKI_docker_install # mv Dockerile.LAB ./docker-openssh-server/Dockerfile
On créé ensuite l’image qui sera la base de notre LAB. il est possible de lui donner le nom que l’on veux à condition de le répercuter dans tous les fichiers de configuration.
/LAB/PKI_docker_install/cd docker-openssh-server && docker build -t breizhland/easy-rsa .
Création de l’environnement LAB
A partir du fichier docker-compose
ci-dessous:
Fichier docker-compose.yml
version: '3.3'
services:
# -------------------------- serveur CA --------------------------------
server_CA:
image: breizhland/easy-rsa:latest
container_name: server_CA
hostname: server_CA
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- SUDO_ACCESS=false
- PASSWORD_ACCESS=truel
- USER_PASSWORD=password123
- USER_NAME=test_user_1
volumes:
- ./server_CA/ssh_config:/config:rw
- ./server_CA/PKI:/data:rw
ports:
- 2222
restart: unless-stopped
networks:
int_net_h1:
ipv4_address: 192.168.10.10
# ------------------------ serveur CA Intermédiaire ----------------------------
server_SubCA:
image: breizhland/easy-rsa:latest
container_name: server_SubCA
hostname: server_SubCA
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- SUDO_ACCESS=false
- PASSWORD_ACCESS=truel
- USER_PASSWORD=password123
- USER_NAME=test_user_2
volumes:
- ./server_subCA/ssh_config:/config:rw
- ./server_subCA/PKI:/data:rw
ports:
- 2222
restart: unless-stopped
networks:
int_net_h1:
ipv4_address: 192.168.10.20
# ------------------------ serveur client SubCA --------------------------------
server_3:
image: breizhland/easy-rsa:latest
# image: lscr.io/linuxserver/openssh-server:latest
container_name: server_3
hostname: server_3 #optional
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- SUDO_ACCESS=false #optional
- PASSWORD_ACCESS=true #optional
- USER_PASSWORD=password123 #optional
- USER_NAME=test_user_3 #optional
volumes:
- ./server3/ssh_config:/config:rw
- ./server3/PKI:/data:rw
ports:
- 2222
restart: unless-stopped
networks:
int_net_h1:
ipv4_address: 192.168.10.30
# ------------------------ Definition des reseaux ----------------------------
networks:
int_net_h1:
name: pki_int_h1
driver: bridge
internal: true
attachable: true
ipam:
config:
- subnet: 192.168.10.0/24
gateway: 192.168.10.254
# docker-compose up -d
[+] Running 4/4
✔ Network pki_int_h1 Created 0.1s
✔ Container server_3 Started 2.4s
✔ Container server_SubCA Started 1.2s
✔ Container server_CA Started 1.4s
On peux contrôler le bon fonctionnement de notre petite infrastructure.
# docker-compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
server_3 breizhland/easy-rsa:latest "/init" server_3 9 minutes ago Up 9 minutes
server_CA breizhland/easy-rsa:latest "/init" server_CA 9 minutes ago Up 9 minutes
server_SubCA breizhland/easy-rsa:latest "/init" server_SubCA 9 minutes ago Up 9 minutes
Configuration de l’Autorité de Certification Principale (Root CA)
Étape 1 : Initialisation de la PKI sur l’AC Principale
Afin de lancer les commandes de création dans les containers, je vais créer un ou plusieurs alias comme ci-dessous.
alias easyrsa='docker exec -it <SERVER_ID> easyrsa'
Ensuite pour créer la PKI sur la CA principale, il suffit de remplacer la partie <SERVER_ID>
par `server_CA'.
J’opte pour l’option trois alias, ce qui permettra de lancer les commandes sans risques d’erreurs.
alias easyrsa_CA='docker exec -it server_CA easyrsa'
alias easyrsa_subCA='docker exec -it server_SubCA easyrsa'
alias easyrsa_srv='docker exec -it server_3 easyrsa'
On peut ensuite lancer la création de la paire de clefs pour la CA
# easyrsa_CA init-pki
Sortie de la commande
Notice
------
'init-pki' complete; you may now create a CA or requests.
Your newly created PKI dir is:
* /data/pki
* Using Easy-RSA configuration:
* IMPORTANT: Easy-RSA 'vars' template file has been created in your new PKI.
Edit this 'vars' file to customise the settings for your PKI.
To use a global vars file, use global option --vars=<YOUR_VARS>
* Using x509-types directory: /usr/share/easy-rsa/x509-types
server_CA
.
La structure de répertoire suivante est créé:
# LAB/PKI_docker_install/server_CA/PKI # ll pki
total 40
-rw------- 1 root root 5043 Aug 3 00:55 openssl-easyrsa.cnf
drwx------ 2 root root 4096 Aug 3 00:55 private
drwx------ 2 root root 4096 Aug 3 00:55 reqs
-rw------- 1 root root 9014 Aug 3 00:55 vars
-rw------- 1 root root 9014 Aug 3 00:55 vars.example
On va éditer le fichier server_CA/PKI/pki/vars
et enlever les #
en renseingant les lignes suivantes:
- Pour la partie Organisation A noter que si cette partie ne vous intéresse pas plus que ça, il est possible de désactiver son utilisation en positionnant le paramêtre suivant:
# Choices are:
# cn_only - Use just a commonName value.
# org - Use the "traditional" format:
# Country/Province/City/Org/Org.Unit/email/commonName
#
set_var EASYRSA_DN "cn_only"
Autrement:
set_var EASYRSA_DN "org" # Set to "org" to activate following information request
set_var EASYRSA_REQ_COUNTRY "FR"
set_var EASYRSA_REQ_PROVINCE "Bretagne"
set_var EASYRSA_REQ_CITY "Lorient"
set_var EASYRSA_REQ_ORG "Breizhland"
set_var EASYRSA_REQ_EMAIL "security@breizhland.eu"
set_var EASYRSA_REQ_OU "breizhland inc."
- Pour la partie configuration:
set_var EASYRSA_PKI "$PWD/pki"
set_var EASYRSA_CA_EXPIRE 730 # délai de validité de la CA (Par défaut 3650)
set_var EASYRSA_CERT_EXPIRE 365 # délai de validité des certificats (Par défaut 825)
set_var EASYRSA_CRL_DAYS 30 # délai entre deux publication de la CRL (Par défaut 180)
set_var EASYRSA_CERT_RENEW 30 # délai de vérification de l'expiration d'un certificat.
Étape 2 : Génération de la paire de clés pour l’AC Principale
Maintenant, nous allons générer une paire de clés pour notre AC Racine.
# easyrsa_CA build-ca nopass
Au cours du processus de création, le nom de votre autorité de certification vous sera demandé, c’est le nom commun (CN)(Common Name)
.
Ce nom est purement à des fins d’affichage et peut être défini comme vous le souhaitez.
Sortie de la commande
* Using SSL: openssl OpenSSL 3.1.1 30 May 2023 (Library: OpenSSL 3.1.1 30 May 2023)
* Using Easy-RSA configuration: /data/pki/vars
Using configuration from /data/pki/57178dfd/temp.83a74087
....+++++++++++++++++++++++++++++++++++++++*...................+.+.....+....+...+..+.+.....+++++++++++++++++++++++++++++++++++++++*.....+..........+.........+......+...........+...++++++
.......+...+.........+.....+...+.........+....+..........................+..........+++++++++++++++++++++++++++++++++++++++*....+...+++++++++++++++++++++++++++++++++++++++*..............+..+......+.............+..+............+.+.....+.......+...+.....+.+......+...+......+.....+.+........+.+.....+....+.....+..........+..+.........+...+......+.......+..+...+....+...+.................+.+...+.........+...............+...+........+............+............+.++++++
-----
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]:breizhland CA
Notice
------
CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/data/pki/ca.crt
Configuration de l’Autorité de Certification Intermédiaire (SubCA)
Étape 3 : Initialisation de la PKI pour la SubCA
# easyrsa_subCA init-pki
Sortie de la commande
Notice
------
'init-pki' complete; you may now create a CA or requests.
Your newly created PKI dir is:
* /data/pki
* Using Easy-RSA configuration:
* IMPORTANT: Easy-RSA 'vars' template file has been created in your new PKI.
Edit this 'vars' file to customise the settings for your PKI.
To use a global vars file, use global option --vars=<YOUR_VARS>
* Using x509-types directory: /usr/share/easy-rsa/x509-types
Étape 4 : Création de la demande de certificat pour la SubCA
LAB/PKI_docker_install # easyrsa_subCA build-ca subca nopass
Sortie de la commande
* Using SSL: openssl OpenSSL 3.1.1 30 May 2023 (Library: OpenSSL 3.1.1 30 May 2023)
* Using Easy-RSA configuration: /data/pki/vars
Using configuration from /data/pki/d40458b4/temp.e7f06630
.............+.....+.+..+...+.........+.+............+..+...+.......+........+.......+++++++++++++++++++++++++++++++++++++++*....+.+......+..+...+.........+.+..+............+....+.....+....+..+......+....+.....+..........+...........+...+....+......+.....+......+...+.+.....+....+..+..........+...+..+.+.....+.........+.+.........+...+......+..+....+..................+...+..+.......+.....+...+..........+..+.+..+...+...+++++++++++++++++++++++++++++++++++++++*..+...+...+.........+.....+......+....+.....+.............+...........+.......+..+...+...............+............+.++++++
......+...+..+...+...............+.+.....+++++++++++++++++++++++++++++++++++++++*.+......+......+.......+......+......+.....+......+....+...+...+..+.+..+...+....+...+...............+...+.....+....+.....+.............+.....+.............+.........+..+....+.....+.+++++++++++++++++++++++++++++++++++++++*...+...............++++++
-----
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 Sub-CA]:breizhland SubCA_01
Notice
------
NOTE: Your intermediate CA request is at /data/pki/reqs/ca.req
and now must be sent to your parent CA for signing. Place your resulting cert
at /data/pki/ca.crt prior to signing operations.
Étape 5 : Import de la requête de la SubCA sur l’AC Principale
Une fois qu’une autorité de certification est créée, la PKI est destinée à être utilisée pour importer des demandes provenant de systèmes externes qui demandent un certificat signé à cette autorité de certification. Afin de signer la requête, elle doit d’abord être importée afin qu’Easy-RSA en ait connaissance. Ce fichier de demande doit être un CSR standard au format PKCS#10. Quel que soit le nom du fichier à importer, Easy-RSA utilise un “nom court” défini lors de l’importation pour faire référence à cette requête. L’importation fonctionne comme ceci :
easyrsa import-req /path/to/request.req nameOfRequest
Le nom de la demande nameOfRequest
doit normalement faire référence au système ou à la personne qui fait la demande.
On recopie le fichier request
de la SubCA:
LAB/PKI_docker_install/ # cp ./server_subCA/PKI/pki/reqs/ca.req ./server_CA/PKI/pki/reqs/server_subca.req
On peux ensuite lancer l’import sur la CA
easyrsa_CA import-req /data/pki/reqs/server_subca.req SubCA_breizhland.eu
Sortie de la commande
* Using SSL: openssl OpenSSL 3.1.1 30 May 2023 (Library: OpenSSL 3.1.1 30 May 2023)
* Using Easy-RSA configuration: /data/pki/vars
Notice
------
The request has been successfully imported with a short name of: SubCA_breizhland.eu
You may now use this name to perform signing operations on this request.
Étape 6 : Signer la demande de la SubCA avec la AC Principale.
Une fois qu’Easy-RSA a importé une demande, elle peut être examinée et signée. Chaque certificat a besoin d’un « type » qui contrôle les extensions que le certificat obtient. Easy-RSA est livré avec 3 types possibles : client
, server
et ca
, décrits ci-dessous :
- client - Un client TLS, adapté à un utilisateur VPN ou à un navigateur Web (client Web)
- server - Un serveur TLS, adapté à un VPN ou à un serveur Web
- ca - Une autorité de certification subordonnée, utilisée lors de l’enchaînement de plusieurs autorités de certification
easyrsa_CA sign-req ca SubCA_breizhland.eu
Sortie de la commande
* Using SSL: openssl OpenSSL 3.1.1 30 May 2023 (Library: OpenSSL 3.1.1 30 May 2023)
* Using Easy-RSA configuration: /data/pki/vars
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 ca certificate for 825 days:
subject=
commonName = server_subca
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /data/pki/e319cf54/temp.50ad1090
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'server_subca'
Certificate is to be certified until Nov 5 09:14:21 2025 GMT (825 days)
Write out database with 1 new entries
Data Base Updated
Notice
------
Certificate created at:
* /data/pki/issued/SubCA_breizhland.eu.crt
SubCA
.
Étape 7 : Mise en place du certificat sur la SubCA
Ensuite, on copie le contenu du fichier /data/pki/issued/SubCA_breizhland.eu.crt
vers le fichier pki/ca.crt
de notre CA Intermédiaire, et le tour est joué !
LAB/PKI_docker_install # cp server_CA/PKI/pki/issued/SubCA_breizhland.eu.crt server_subCA/PKI/pki/ca.crt
On peux contrôler le contenu de ce certificat.
LAB/PKI_docker_install # openssl x509 -noout -text -in server_subCA/PKI/pki/ca.crt
Sortie de la commande
1Certificate:
2 Data:
3 Version: 3 (0x2)
4 Serial Number:
5 8d:78:6a:f9:72:a9:2b:ee:bd:04:ab:ce:a2:99:95:0f
6 Signature Algorithm: sha256WithRSAEncryption
7 Issuer: CN = Breizhland CA
8 Validity
9 Not Before: Aug 3 15:59:16 2023 GMT
10 Not After : Aug 2 15:59:16 2024 GMT
11 Subject: CN = Breizhland Sub-CA
12 Subject Public Key Info:
13 Public Key Algorithm: rsaEncryption
14 Public-Key: (2048 bit)
15 Modulus:
16 00:ce:0d:43:ad:0f:53:8b:51:87:24:76:ba:a9:c8:
17 9d:a8:fb:d4:a2:99:e1:cf:22:1e:31:02:02:ee:5a:
18 6e:3d:1a:0e:95:e6:e3:04:b1:bd:4d:0b:f4:d8:e9:
19 40:aa:bd:ca:34:c1:3d:a3:89:81:24:7b:a9:e1:9a:
20 e0:15:3c:ca:7a:96:33:b8:64:06:af:56:bf:b3:b5:
21 59:aa:5d:3a:47:8d:15:89:2d:17:fd:0e:45:13:65:
22 51:f1:d7:39:80:79:94:52:21:ad:de:fb:41:5d:ce:
23 37:64:0c:e3:92:37:b1:9a:ba:08:1a:18:73:f6:3d:
24 86:cb:bd:47:81:d0:56:e1:9f:f2:e3:77:7c:c3:4b:
25 3c:5e:fb:c1:eb:95:a6:0d:67:77:96:3e:b6:3a:d7:
26 79:52:d6:fa:6d:33:26:f4:c1:07:b0:7c:66:12:b4:
27 37:cc:d5:1f:42:7b:e7:20:e1:af:5e:ba:c2:29:61:
28 8a:6e:db:21:fc:97:5c:3b:34:8a:4f:1d:c2:9c:53:
29 b8:dd:ad:7f:3f:5b:cd:16:7c:b9:29:73:4a:e7:ca:
30 82:e0:9d:38:dc:39:e1:d9:3d:9a:de:0c:4e:80:8d:
31 b0:02:a3:fd:a6:9f:59:0d:df:a2:84:08:0e:de:26:
32 fa:f8:13:20:c1:67:14:9e:8e:ae:a7:05:c2:9d:d1:
33 78:05
34 Exponent: 65537 (0x10001)
35 X509v3 extensions:
36 X509v3 Basic Constraints:
37 CA:TRUE
38 X509v3 Subject Key Identifier:
39 91:03:B4:71:66:BB:1C:C2:A9:FF:1F:F0:8C:97:CB:B3:4A:43:FB:69
40 X509v3 Authority Key Identifier:
41 keyid:48:1C:1D:5E:57:A3:F8:94:03:FF:92:AB:B6:DD:29:6C:95:0A:65:C4
42 DirName:/CN=Breizhland CA
43 serial:14:1E:6C:5B:B8:53:21:C3:EA:79:9B:23:43:53:F1:E1:AE:16:76:E1
44 X509v3 Key Usage:
45 Certificate Sign, CRL Sign
46 Signature Algorithm: sha256WithRSAEncryption
47 Signature Value:
48 1c:90:58:3f:0c:04:76:b8:3c:d3:00:05:82:1e:91:0e:d6:22:
49 e7:29:05:03:5f:21:ca:a9:59:f4:9e:cb:96:78:0c:47:e9:71:
50 4c:82:56:d9:14:c4:0b:31:ae:ad:8f:c5:f0:87:3c:57:36:5f:
51 33:80:29:10:86:c4:04:33:d0:f9:98:f2:a1:37:c0:33:38:62:
52 2b:11:60:71:c7:73:0d:16:ed:a4:2d:4a:6a:27:70:01:f2:9b:
53 26:50:63:e4:d5:33:9a:d3:bc:90:d3:60:cc:48:a2:2b:a7:24:
54 2b:50:1f:2b:ed:d6:55:96:ca:c9:35:8c:da:fb:d1:5d:19:56:
55 a3:93:bf:54:a9:b9:a8:de:92:01:b3:21:02:25:06:85:3f:1d:
56 21:29:db:72:6b:b7:2c:dd:d8:7b:65:5b:81:fe:87:22:a4:5a:
57 3b:8f:92:f0:fc:0e:dc:0b:06:d9:dc:fd:33:74:dd:85:c5:e2:
58 bb:87:ff:46:98:a4:4b:c5:1b:5b:c2:c7:a8:69:af:84:91:54:
59 a2:34:77:36:e5:84:95:69:a8:cf:de:18:13:25:96:6b:33:66:
60 22:96:f5:73:62:5f:6b:93:27:ad:d9:02:ab:ba:92:65:4a:f0:
61 b2:60:d8:ad:c6:da:73:d7:cd:01:99:fc:89:72:00:7c:a1:44:
62 77:50:6d:2d
Création d’un certificat pour un client
mkdir server_subCA/PKI/pki/to_imports/
Création de la demande de certificat sur le client.
/LAB/PKI_docker_install # easyrsa_srv init-pki
Notice
------
'init-pki' complete; you may now create a CA or requests.
Your newly created PKI dir is:
* /data/pki
* Using Easy-RSA configuration:
* IMPORTANT: Easy-RSA 'vars' template file has been created in your new PKI.
Edit this 'vars' file to customise the settings for your PKI.
To use a global vars file, use global option --vars=<YOUR_VARS>
* Using x509-types directory: /usr/share/easy-rsa/x509-types
root@debian-64gb-fsn1-2 /home/patlegu/LAB/PKI_docker_install # easyrsa_srv gen-req server_3 nopass
Sortie de la commande
* Using SSL: openssl OpenSSL 3.1.1 30 May 2023 (Library: OpenSSL 3.1.1 30 May 2023)
* Using Easy-RSA configuration: /data/pki/vars
........+.+...........+...+....+++++++++++++++++++++++++++++++++++++++*......................+..+.+..+.......+.....+...+.+............+..+...+.........+.+...+..+...+....+.....+...+..................+....+.....+................+.....+.+.....+.+..+.+......+.....+..........+...+..+....+..+.......+...+..+...............+......+..........+++++++++++++++++++++++++++++++++++++++*.+................+........+......................+...+..+...+.+.....+.+.....+..........+...+...+.....++++++
.......+++++++++++++++++++++++++++++++++++++++*...+++++++++++++++++++++++++++++++++++++++*....+.....+.+......+.....+.+..+.......+.....+...+......+.......+..+.......+......+...+.....+....+............+...+.....+...+.......+...+.........+.........+.....+.........+.+..+.......+..+.+..+......+...................+...+..+............+...+......+.+...........+.........+.+........+.......+...+..+.........+......+.........+.+...+.........+.....+...+....+........+...+...............+...+....+......+......+.....+.+.....+.......+..+......+..........+........+....+..+.+............+..+......+...+..........+............+........+.+.....+.+........+.+........+...+...............+...+....+......+...........+.........+....+.....+...+.......+...+..+...............+.+..+...+......................+........+...................+..+...+......+........................+.......+...........+............+.......+...+..+.+...............+...+..+.........+...+.+.....+.......+........+......+.+..+......+.........+..........+.....+.......+......+.....+.......+.....+.......+........+.+..+...+.+.........+.....+....+.....+.............+..+.....................+.+.....+..............................+....+......+......+.....+..........+..................+......+.....+.........+.+...+..+.........+....+.....+.......+.........+............+..+...+.........+.+...+...........+.+...............+............+......+.....+......+...+...............+..........+.....+...+...+.+...+..+...............+...+......+............+.............+..+.............+..+....+...+......+..+.......+...+...+.....+......+.+..+.+.....+.+.....+....+......+........+............+....+............+..+..........+........+....+.........+.....+......+.+.........+.....+.........+.........+...+...+.......+............+.....+.......+.....+...+...+............+.+..+...+.+.....+....+......+..............+.+.....+.+..+......+.......+...+..+.......++++++
-----
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) [server_3]:
Notice
------
Keypair and certificate request completed. Your files are:
req: /data/pki/reqs/server_3.req
key: /data/pki/private/server_3.key
Recopie de la demande sur la SubCA
/LAB/PKI_docker_install # cp server3/PKI/pki/reqs/server_3.req server_subCA/PKI/pki/to_imports/
Import de la demande sur la SubCA
/LAB/PKI_docker_install # easyrsa_subCA import-req /data/pki/to_imports/server3.req server_3
* Using SSL: openssl OpenSSL 3.1.1 30 May 2023 (Library: OpenSSL 3.1.1 30 May 2023)
* Using Easy-RSA configuration: /data/pki/vars
Notice
------
The request has been successfully imported with a short name of: server_3
You may now use this name to perform signing operations on this request.
Création du certificat pour le client
/LAB/PKI_docker_install # easyrsa_subCA sign-req server server_3
Sortie de la commande
* Using SSL: openssl OpenSSL 3.1.1 30 May 2023 (Library: OpenSSL 3.1.1 30 May 2023)
* Using Easy-RSA configuration: /data/pki/vars
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 365 days:
subject=
commonName = server3
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /data/pki/5cbd46cd/temp.c8033559
480B9455887F0000:error:0700006C:configuration file routines:NCONF_get_string:no value:crypto/conf/conf_lib.c:315:group=<NULL> name=unique_subject
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'server3'
Certificate is to be certified until Aug 2 18:09:54 2024 GMT (365 days)
Write out database with 1 new entries
Data Base Updated
Notice
------
Certificate created at:
* /data/pki/issued/server_3.crt
Générer différents formats de clefs
PKCS12
Pour exporter au format pksc12:
Il va falloir recopier la clef du client server_3
sur le serveur SubCA
pourpouvoir l’inclure dans le certificat pkcs12
LAB/PKI_docker_install # cp server3/PKI/pki/private/server3.key server_subCA/PKI/pki/private/server_3.key
Ensuite on va pouvoir créer le certificat.
LAB/PKI_docker_install # easyrsa_subCA export-p12 server_3
Sortie de la commande
* Using SSL: openssl OpenSSL 3.1.1 30 May 2023 (Library: OpenSSL 3.1.1 30 May 2023)
* Using Easy-RSA configuration: /data/pki/vars
Enter Export Password:
Verifying - Enter Export Password:
Notice
------
Successful export of p12 file. Your exported file is at the following
location: /data/pki/private/server_3.p12
serveur_3
LAB/PKI_docker_install # cp server_subCA/PKI/pki/private/server_3.p12 server3/PKI/pki/
Format PEM
/LAB/PKI_docker_install/server3/PKI/pki # openssl pkcs12 -in server_3.p12 -out server_3.pem -nodes
Enter Import Password:
On peux simplement valider en appuyant sur <ENTREE>
Destruction du LAB
Arrêt des containers.
/LAB/PKI_docker_install # docker-compose down
[+] Running 4/4
✔ Container server_SubCA Removed 5.7s
✔ Container server_3 Removed 5.3s
✔ Container server_CA Removed 5.5s
✔ Network pki_int_h1 Removed 0.2s
Suppression du répertoire GitHub
du LAB
/LAB/PKI_docker_install # cd ..
/LAB #rm -rf PKI_docker_install