HTTPS - HTTP/2
Dans cette section nous allons voir comment configurer ARCHWAY
pour que le serveur soit accessible en HTTPS
et activer le HTTP/2
.
ARCHWAY
utilise un fichier .p12
pour importer les certificats et clés nécessaires.
Un fichier .p12
est un format de fichier binaire utilisé pour stocker le certificat du serveur, ainsi que toute la chaîne de certificats et la clé privée dans un seul fichier encrypté. Il est également connu sous le nom de fichier PKCS#12, qui est un standard pour le stockage de clés privées et de certificats.
Certificats autogénérés
Nous allons commencer avec un fichier .p12
autogénéré pour localhost
.
Ce dernier pourra être utilisé localement sur le poste du développeur par exemple.
La procédure est décrite pour une distribution linux
debian
.
Autorités certifiantes
Nous allons générer une nouvelle CA
locale qui émettra et signera notre fichier .p12
Mise à jour et installation des outils
$ sudo update-ca-certificates
$ sudo apt install libnss3-tools mkcert
Génération de la CA
locale
La commande suivate va créer et installer une CA localement dans vos differents navigateurs sur votre poste.
$ sudo mkcert -install
The local CA is now installed in the system trust store! 👍
The local CA is now installed in the Firefox and/or Chrome/Chromium trust store (requires browser restart)! 🦊
The local CA is now installed in Java's trust store! 👍
Creation du .p12
Nous allons créer un magasin contenant les certificats et clé pour localhost
.
$ mkcert -p12-file server-keystore.p12 -pkcs12 localhost
Created a new certificate valid for the following names 📜
- "localhost"
The PKCS#12 bundle is at "server-keystore.p12" ✅
The legacy PKCS#12 encryption password is the often hardcoded default "changeit" ℹ️
It will expire on 17 April 2026 🗓
Certificats fournis
Si vous avez un fichier .p12
pour votre domaine, passez à la section suivante.
Si votre registraire vous fournit un certificat et une clé privée, utilisez la procédure suivante pour créer le fichier .p12
.
Custom domaine
Si votre registraire vous fournit pour votre domaine mydomain.com
une clé privée et un certificat ssl
. Vous pouvez générer un magasin au format .p12
.
# mydomain.com_private_key.key
# mydomain.com_ssl_certificate.cer
À partir de ces fichiers générez le fichier server-keystore.p12
.
openssl pkcs12 -export -out server-keystore.p12 -inkey mydomain.com_private_key.key -in mydomain.com_ssl_certificate.cer
# create password
Afficher les infos
keytool -list -keystore server-keystore.p12 -storetype PKCS12 -v
Utilisation du .p12
Pour ajouter le certificat à ARCHWAY
et ainsi activer, le https
et le http/2
, nous allons modifier le docker-compose.yml
utilisé dans le tutoriel pour ajouter le montage du magasin .p12
dans l'image archway
.
docker-compose.yml
version: '3.8'
services:
archway:
image: ghcr.io/softwarity/archway-ce:latest
ports:
- 443:8443 # HTTPS
volumes:
- ./server-keystore.p12:/server-keystore.p12:ro
environment:
SERVER_PORT: 8443
SSL: "true"
SSL_KEY_STORE_TYPE: PKCS12
SSL_KEY_STORE: server-keystore.p12
SSL_KEY_STORE_PASSWORD: changeit
SSL_KEY_ALIAS: 1
MONGODB_HOST: mongodb
MONGODB_DB_NAME: archway
MONGODB_USER: admin
MONGODB_PWD: changeit
mongodb:
image: mongo # official image
volumes:
- mongodb_data:/data/db
environment:
MONGO_INITDB_DATABASE: archway
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: changeit
volumes:
mongodb_data:
Explications
./server-keystore.p12:/server-keystore.p12:ro
La ligne ./server-keystore.p12:/server-keystore.p12:ro
définit que l'on va monter le magasin .p12
à la racine du conteneur. On précise que c'est en lecture seule ro
.
Dans notre cas, le fichier server-keystore.p12
et le fichier docker-compose.yml
doivent être au même niveau.
Adaptez au besoin le mot de passe bien sûr.
- 443:8443 # HTTPS
Ceci expose le port 8443
du conteneur sur le port local 443
.
Si le port 443 n'est pas libre vous povez en utiliser un autre.
SERVER_PORT: 8443
SSL: "true"
SSL_KEY_STORE_TYPE: PKCS12
SSL_KEY_STORE: server-keystore.p12
SSL_KEY_STORE_PASSWORD: changeit
SSL_KEY_ALIAS: 1
SERVER_PORT
définit le portHTTPS
interne d'écoute du serveur.SSL
active leSSL
, leHTTPS
.SSL_KEY_STORE_TYPE
Type du magasin, normalementPKCS12
.SSL_KEY_STORE
Le magasin au format.p12
que l'on a monté.SSL_KEY_STORE_PASSWORD
Le mot de passe de la clé privée.SSL_KEY_ALIAS
L'alias du certificat dans le magasin.
Pour connaitre la liste des alias dans le magasin utiliser la commande:
keytool -list -keystore server-keystore.p12 -storetype PKCS12 -v
Démarrage du projet
docker compose -f docker-compose.yml pull
docker compose -f docker-compose.yml up -d
Connexion: https://localhost:443/login
le lien précédent utilise localhost
, il faut bien sur adater cela avec le DNS
lié au certificat utilisé.