Créer son propre CA (certificate authority)

Comment créer son propre CA

Créer son propre CA (certificate authority)

Si dans votre homelab vous n'avez pas de client extérieur qui accède vos ressources vous pouvez créer votre propre CA pour ne plus avoir la page d'erreur pour les certificats self-signed car, justement, ils ne seront plus self-signed mais plutôt signé avec votre propre CA.

Easy-RSA

Premièrement installer Easy-RSA. Easy-RSA est un outil pour générer une clé privé et un public root certificate pour signer les request de vos clients et serveur.

apt install easy-rsa

Dossier pour la clé publique

Ensuite, en tant qu'un user non-root, créer un dossier pour gérer la clé publique du CA

mkdir ~/ca && cd ca

Maintenant, rouler le script easyrsa pour initialiser le pki

/usr/share/easy-rsa/easyrsa init-pki

Le dossier ~/ca/pki sera créer avec les fichiers:

    • openssl-easyrsa.cnf
    • private
    • reqs

Créer le Certificate Authority

Pour commencer, créer un fichier vars qui va contenir les informations de votre organisation

set_var EASYRSA_REQ_COUNTRY    "CA"
set_var EASYRSA_REQ_PROVINCE   "QUEBEC"
set_var EASYRSA_REQ_CITY       "Montreal"
set_var EASYRSA_REQ_ORG        "Cybertron"
set_var EASYRSA_REQ_EMAIL      "email@email"
set_var EASYRSA_REQ_OU         "Community"
set_var EASYRSA_ALGO           "ec"
set_var EASYRSA_DIGEST         "sha512"

Pour créer le root public et la clé privé, rouler la commande

/usr/share/easy-rsa/easyrsa build-ca

Vous devez un passphrase pour la clé, il ne faut pas perdre ce mot de passe car vous devez l'entrer à chaque fois que vous allez signer des requests.
Puis confirmer le CN (common name).

2 fichiers important ont été créer:

    • ~/pki/ca.crt
    • /pki/private/ca.key

ca.crt

Ce fichier est le fichier du CA publique. Les clients vont ce servir de ce fichier pour vérifier l'authenticité de ce certificat. Toutes les machines / usagers de votre homelab va maintenant devoir posséder ce fichier pour faire confiance au certificat signé par votre CA.


ca.key

ca.key est la clé privé de votre CA qui va signer vos certificats.


Installation de la clé publique du CA sur un serveur remote

Transférer la clé publique sur une de vos machines par scp.

scp ca.crt user@remoteserver:/tmp/

Bouger ce fichier sous /usr/local/share/ca-certificates/ et updater le ca-certificates

sudo mv /tmp/ca.crt /usr/local/share/ca-certificates && sudo update-ca-certificates

Créer un CSR (Certificate signing request)

Sur le serveur remote il faut utiliser openssl pour générer un CSR qui sera signé par votre CA.

Première étape: Créer un private key

openssl genrsa -out <server name>-server.key

Ensuite, créer le CSR

openssl req -new -key <server name>-server.key -out <server name>-server.req

Vous devrez répondre à quelques questions, dans le common name vous devez mettre le nom dns du serveur.

Ensuite, transférer votre .req sur votre CA avec scp

scp *.req user@caserver:/tmp/

Signer le CSR

Maintenant, vous devez importer et signer le CSR

Si vous voulez ajouter un alternate subject name vous devez exporter la variable la variable suivante:

export EASYRSA_EXTRA_EXTS="subjectAltName=DNS:*.*alternatesubjectname*, DNS:anothersubjetname"

Au même niveau que le fichier vars, rouler:

/usr/share/easy-rsa/easyrsa import-req /tmp/<server name>.req <server-name>

Ensuite, la signature

/usr/share/easy-rsa/easyrsa sign-req server <common name>

Le certificat sera créer sous: ~/ca/pki/issued


Ajoute le certificat à NGINX sur docker

Avec scp, transférer le .crt du serveur vers le remote server dans le path où vous mapper vos certificats.

Example:

volumes:
  - /etc/docker/config/reverse-proxy/nginx.conf:/etc/nginx/nginx.conf
  - /etc/docker/config/reverse-proxy/conf.d:/etc/nginx/conf.d
  - /etc/docker/config/reverse-proxy/certs:/etc/ssl/certs

Dans le fichier nginx.conf il suffit de lui donner le chemin vers le certificate et la clé

ssl_certificate /etc/ssl/certs/<certificat>.crt;
ssl_certificate_key /etc/ssl/certs/<server key>.key;

Finalement, pour la dernière étape il s'agit d'ajouter le ca.crt (votre authority) dans votre browser.