NOPE LinkedIn

Catégories:
SSL
LAB

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’image docker openssh-server de linuxio et de la modifier pour y ajouter la partie easyrsa

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
On lance la création des différents serveurs.

# 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
On peut facilement contrôler le résultat de la commande en vérifiant le contenu du répertoire qui est monté dans le container 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
Nous avons maintenant un certificat complétement fonctionnel pour notre 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
Le certificat peut être recopié sur le server 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