Créer son propre CA (certificate authority)
Comment créer son propre CA
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-rsaDossier 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 caMaintenant, rouler le script easyrsa pour initialiser le pki
/usr/share/easy-rsa/easyrsa init-pkiLe 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-caVous 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-certificatesCré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.keyEnsuite, créer le CSR
openssl req -new -key <server name>-server.key -out <server name>-server.reqVous 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/certsDans 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.
