Génération de certificats SSL personnalisés

Préparation de l'espace de travail

Créer des dossiers pour les certificats :

mkdir dataNginx
mkdir dataCertbot

ou, pour un certificat auto-signé :

mkdir certificats

Génération d'un certificat signé par Let's Encrypt

Cette option est à privilégier, mais n'est valable que pour des serveurs accessibles depuis l'extérieur via un nom de domaine.

1 - Démarrer un serveur Nginx :

mkdir dataNginx
docker run -dit --rm -p <port>:80 -v /<path-to>/dataNginx:/usr/share/nginx/html nginx:1.13-alpine

Exemple :

mkdir dataNginx
docker run -dit --rm -p 80:80 -v /home/utilisateur/dataNginx:/usr/share/nginx/html nginx:1.13-alpine


2 - Exécuter Certbot :

mkdir dataCertbot
docker run -it -v /<path-to>/dataCertbot/conf:/etc/letsencrypt certbot/certbot certonly --manual -d <domaine>

Exemple :

mkdir dataCertbot
docker run -it -v /home/utilisateur/dataCertbot/conf:/etc/letsencrypt certbot/certbot certonly --manual -d 'depotImage.com'

3 - Certbot va alors demander de placer des données data dans un fichier file et d'y accéder via une url de la forme https://<domaine>/.well-known/acme-challenge/<file>. Avant de valider, ouvrir un nouveau terminal et faire :

echo data >  <path-to>/dataNginx/.well-known/acme-challenge/file

Exemple :

  • url : https://depotImage.com/.well-known/acme-challenge/qsGlgKg8l2ZucF0wd39KR1YPbWFTr5DGdn-B84jE31o
  • data : qsGlgKg8l2ZucF0wd39KR1YPbWFTr5DGdn-B84jE31o.XguEyJ5xzKTwpLgHTMij0fsoWzuFihUSmNpi97XBXvc

  • Éditer le fichier /home/utilisateur/.well-known/acme-challenge/qsGlgKg8l2ZucF0wd39KR1YPbWFTr5DGdn-B84jE31o :

    echo "qsGlgKg8l2ZucF0wd39KR1YPbWFTr5DGdn-B84jE31o.XguEyJ5xzKTwpLgHTMij0fsoWzuFihUSmNpi97XBXvc" > /home/utilisateur/.well-known/acme-challenge/qsGlgKg8l2ZucF0wd39KR1YPbWFTr5DGdn-B84jE31o
    

4 - Toujours avant de valider. Se rendre à l'adresse url : le navigateur doit proposer d'enregistrer un fichier du nom de file.

Si, et seulement si, la fenêtre apparaît, alors valider Certbot.

5 - Pour valider que la création du certificat a bien fonctionné, créer un fichier index.html dans le dossier <path-to>/dataNginx et accéder à l'adresse https://<domaine>.

Exemple :

  • Création du fichier index.html

    echo 'Bonjour' > /home/utilisateur/dataNginx/index.html
    
  • Le navigateur, à l'adresse https://depotImage.com, doit renvoyer un 'Bonjour'.

Les clés se trouvent alors dans <path-to>/dataCertbot/conf/live/<domaine>/.

Génération d'un certificat auto-signé

Documentation utilisée

Cette option n'est pas à privilégier, mais permet néanmoins de faire fonctionner Harbor si le serveur n'est pas accessible via un nom de domaine depuis l'extérieur.

1 - Se placer dans le dossier certificats

2 - Générer une clé privée :

openssl genrsa -des3 -out server.key 1024

3 - Générer un certificat CSR, en indiquant dans "Common Name" l'adresse IP de la machine ou le nom de domaine :

openssl req -new -key server.key -out server.csr

4 - Supprimer la passphrase de la clé :

cp server.key server.key.org
openssl rsa -in server.key.org -out server.key

5 - Générer le certificat auto-signé :

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Le certificat se trouve dans certificats/server.cert.
La clé privée se trouve dans certificats/server.key.