424 lines
11 KiB
Markdown
424 lines
11 KiB
Markdown
# Configuration HTTPS pour naval.lan avec Traefik (Kubernetes)
|
|
|
|
Ce guide explique comment configurer HTTPS pour votre domaine local `naval.lan` en utilisant Traefik dans Kubernetes sans avertissements de certificat sur les clients Windows et Linux.
|
|
|
|
## Vue d'ensemble
|
|
|
|
Pour éviter les avertissements de certificat auto-signé, vous devez :
|
|
1. Créer votre propre Autorité de Certification (CA)
|
|
2. Générer des certificats SSL signés par votre CA
|
|
3. Configurer Traefik pour utiliser ces certificats
|
|
4. Installer le certificat CA sur toutes les machines clientes
|
|
|
|
## Partie 1 : Créer votre propre Autorité de Certification
|
|
|
|
### 1.1. Générer la clé privée et le certificat CA
|
|
|
|
Sur votre serveur ou poste de travail Linux :
|
|
|
|
```bash
|
|
# Créer un répertoire pour les certificats
|
|
mkdir -p ~/certs/naval-ca
|
|
cd ~/certs/naval-ca
|
|
|
|
# Générer la clé privée CA (RSA 4096 bits)
|
|
openssl genrsa -out ca-key.pem 4096
|
|
|
|
# Générer le certificat CA (valide 10 ans)
|
|
openssl req -new -x509 -days 3650 -key ca-key.pem -out ca-cert.pem \
|
|
-subj "/C=FR/ST=Region/L=Ville/O=Naval Local CA/OU=IT/CN=Naval Local Root CA"
|
|
```
|
|
|
|
**Important** : Gardez `ca-key.pem` en sécurité ! C'est votre clé privée CA racine.
|
|
|
|
## Partie 2 : Générer le certificat SSL pour naval.lan
|
|
|
|
### 2.1. Créer le fichier de configuration OpenSSL
|
|
|
|
Créez un fichier nommé `naval-lan.conf` :
|
|
|
|
```bash
|
|
cat > naval-lan.conf <<EOF
|
|
[req]
|
|
default_bits = 2048
|
|
prompt = no
|
|
default_md = sha256
|
|
req_extensions = req_ext
|
|
distinguished_name = dn
|
|
|
|
[dn]
|
|
C = FR
|
|
ST = Region
|
|
L = Ville
|
|
O = Naval Local
|
|
OU = Département IT
|
|
CN = *.naval.lan
|
|
|
|
[req_ext]
|
|
subjectAltName = @alt_names
|
|
|
|
[alt_names]
|
|
DNS.1 = naval.lan
|
|
DNS.2 = *.naval.lan
|
|
DNS.3 = localhost
|
|
IP.1 = 127.0.0.1
|
|
EOF
|
|
```
|
|
|
|
### 2.2. Générer la demande de signature de certificat (CSR)
|
|
|
|
```bash
|
|
# Générer la clé privée pour naval.lan
|
|
openssl genrsa -out naval-lan-key.pem 2048
|
|
|
|
# Générer le CSR
|
|
openssl req -new -key naval-lan-key.pem -out naval-lan.csr -config naval-lan.conf
|
|
```
|
|
|
|
### 2.3. Signer le certificat avec votre CA
|
|
|
|
```bash
|
|
# Signer le certificat (valide 2 ans)
|
|
openssl x509 -req -in naval-lan.csr -CA ca-cert.pem -CAkey ca-key.pem \
|
|
-CAcreateserial -out naval-lan-cert.pem -days 730 \
|
|
-extensions req_ext -extfile naval-lan.conf
|
|
|
|
# Vérifier le certificat
|
|
openssl x509 -in naval-lan-cert.pem -text -noout
|
|
```
|
|
|
|
## Partie 3 : Configurer Traefik dans Kubernetes
|
|
|
|
### 3.1. Créer un Secret Kubernetes avec les certificats
|
|
|
|
```bash
|
|
# Créer un namespace pour Traefik (s'il n'existe pas)
|
|
kubectl create namespace traefik --dry-run=client -o yaml | kubectl apply -f -
|
|
|
|
# Créer le secret avec vos certificats
|
|
kubectl create secret tls naval-lan-tls \
|
|
--cert=naval-lan-cert.pem \
|
|
--key=naval-lan-key.pem \
|
|
-n traefik
|
|
```
|
|
|
|
### 3.2. Mettre à jour la configuration Traefik
|
|
|
|
Créez ou mettez à jour votre fichier de valeurs Helm Traefik (`traefik-values.yaml`) :
|
|
|
|
```yaml
|
|
# traefik-values.yaml
|
|
additionalArguments:
|
|
- "--providers.kubernetescrd"
|
|
- "--entrypoints.websecure.http.tls=true"
|
|
- "--entrypoints.web.address=:80"
|
|
- "--entrypoints.websecure.address=:443"
|
|
|
|
ports:
|
|
web:
|
|
port: 80
|
|
exposedPort: 80
|
|
websecure:
|
|
port: 443
|
|
exposedPort: 443
|
|
tls:
|
|
enabled: true
|
|
|
|
# Monter le certificat TLS
|
|
volumes:
|
|
- name: naval-lan-tls
|
|
mountPath: "/certs"
|
|
type: secret
|
|
|
|
persistence:
|
|
enabled: true
|
|
```
|
|
|
|
### 3.3. Créer l'IngressRoute pour vos services
|
|
|
|
Exemple de configuration IngressRoute :
|
|
|
|
```yaml
|
|
apiVersion: traefik.containo.us/v1alpha1
|
|
kind: IngressRoute
|
|
metadata:
|
|
name: myapp-ingressroute
|
|
namespace: default
|
|
spec:
|
|
entryPoints:
|
|
- websecure
|
|
routes:
|
|
- match: Host(`myapp.naval.lan`)
|
|
kind: Rule
|
|
services:
|
|
- name: myapp-service
|
|
port: 80
|
|
tls:
|
|
secretName: naval-lan-tls
|
|
---
|
|
# Optionnel : redirection HTTP vers HTTPS
|
|
apiVersion: traefik.containo.us/v1alpha1
|
|
kind: IngressRoute
|
|
metadata:
|
|
name: myapp-http-redirect
|
|
namespace: default
|
|
spec:
|
|
entryPoints:
|
|
- web
|
|
routes:
|
|
- match: Host(`myapp.naval.lan`)
|
|
kind: Rule
|
|
services:
|
|
- name: myapp-service
|
|
port: 80
|
|
middlewares:
|
|
- name: redirect-to-https
|
|
---
|
|
apiVersion: traefik.containo.us/v1alpha1
|
|
kind: Middleware
|
|
metadata:
|
|
name: redirect-to-https
|
|
namespace: default
|
|
spec:
|
|
redirectScheme:
|
|
scheme: https
|
|
permanent: true
|
|
```
|
|
|
|
### 3.4. Appliquer la configuration Traefik
|
|
|
|
```bash
|
|
# Si vous utilisez Helm
|
|
helm upgrade --install traefik traefik/traefik \
|
|
-n traefik \
|
|
-f traefik-values.yaml
|
|
|
|
# Appliquer l'IngressRoute
|
|
kubectl apply -f ingressroute.yaml
|
|
```
|
|
|
|
## Partie 4 : Installer le certificat CA sur les machines clientes
|
|
|
|
### 4.1. Clients Linux
|
|
|
|
#### Ubuntu/Debian :
|
|
|
|
```bash
|
|
# Copier ca-cert.pem vers votre client Linux
|
|
sudo cp ca-cert.pem /usr/local/share/ca-certificates/naval-ca.crt
|
|
|
|
# Mettre à jour les certificats CA
|
|
sudo update-ca-certificates
|
|
|
|
# Vérifier
|
|
openssl s_client -connect myapp.naval.lan:443 -CAfile /usr/local/share/ca-certificates/naval-ca.crt
|
|
```
|
|
|
|
#### RHEL/CentOS/Fedora :
|
|
|
|
```bash
|
|
# Copier ca-cert.pem vers votre client Linux
|
|
sudo cp ca-cert.pem /etc/pki/ca-trust/source/anchors/naval-ca.crt
|
|
|
|
# Mettre à jour les certificats CA
|
|
sudo update-ca-trust
|
|
|
|
# Vérifier
|
|
openssl s_client -connect myapp.naval.lan:443
|
|
```
|
|
|
|
#### Pour Firefox (utilise son propre magasin de certificats) :
|
|
|
|
1. Ouvrir Firefox
|
|
2. Aller dans **Paramètres** → **Vie privée et sécurité**
|
|
3. Descendre jusqu'à **Certificats** → Cliquer sur **Afficher les certificats**
|
|
4. Aller dans l'onglet **Autorités**
|
|
5. Cliquer sur **Importer**
|
|
6. Sélectionner `ca-cert.pem`
|
|
7. Cocher "Confirmer cette AC pour identifier des sites web"
|
|
8. Cliquer sur OK
|
|
|
|
### 4.2. Clients Windows
|
|
|
|
#### Méthode 1 : Utilisation de MMC (Console de gestion Microsoft)
|
|
|
|
1. Copier `ca-cert.pem` sur votre machine Windows
|
|
2. Le renommer en `ca-cert.crt` (optionnel, pour une meilleure reconnaissance)
|
|
3. Faire un clic droit sur `ca-cert.crt` → **Installer le certificat**
|
|
4. Choisir **Ordinateur local** (nécessite les droits administrateur)
|
|
5. Cliquer sur **Suivant**
|
|
6. Sélectionner **Placer tous les certificats dans le magasin suivant**
|
|
7. Cliquer sur **Parcourir** → Sélectionner **Autorités de certification racines de confiance**
|
|
8. Cliquer sur **Suivant** → **Terminer**
|
|
9. Cliquer sur **Oui** à l'avertissement de sécurité
|
|
|
|
#### Méthode 2 : Utilisation de la ligne de commande (PowerShell Administrateur)
|
|
|
|
```powershell
|
|
# Importer le certificat dans le magasin CA racine de confiance
|
|
Import-Certificate -FilePath "C:\chemin\vers\ca-cert.pem" -CertStoreLocation Cert:\LocalMachine\Root
|
|
|
|
# Vérifier
|
|
Get-ChildItem -Path Cert:\LocalMachine\Root | Where-Object {$_.Subject -like "*Naval*"}
|
|
```
|
|
|
|
#### Méthode 3 : Utilisation de certutil (Invite de commandes en Administrateur)
|
|
|
|
```cmd
|
|
certutil -addstore -f "ROOT" ca-cert.pem
|
|
```
|
|
|
|
#### Pour Firefox sur Windows :
|
|
|
|
Mêmes étapes que Firefox sur Linux ci-dessus.
|
|
|
|
### 4.3. Vérifier l'installation
|
|
|
|
#### Linux :
|
|
```bash
|
|
# Tester avec curl
|
|
curl -v https://myapp.naval.lan
|
|
|
|
# Tester avec openssl
|
|
openssl s_client -connect myapp.naval.lan:443 -showcerts
|
|
```
|
|
|
|
#### Windows :
|
|
```powershell
|
|
# Tester avec PowerShell
|
|
Invoke-WebRequest -Uri https://myapp.naval.lan
|
|
|
|
# Ou utiliser le navigateur
|
|
# Naviguer vers https://myapp.naval.lan
|
|
```
|
|
|
|
## Partie 5 : Configuration DNS
|
|
|
|
Assurez-vous que vos clients peuvent résoudre les domaines `naval.lan` :
|
|
|
|
### 5.1. Option 1 : Serveur DNS local (Recommandé)
|
|
|
|
Configurez un serveur DNS local (dnsmasq, Pi-hole, ou DNS Windows) avec :
|
|
```
|
|
*.naval.lan → [IP Traefik Ingress]
|
|
```
|
|
|
|
### 5.2. Option 2 : Fichier hosts
|
|
|
|
#### Linux : `/etc/hosts`
|
|
```bash
|
|
sudo nano /etc/hosts
|
|
```
|
|
|
|
#### Windows : `C:\Windows\System32\drivers\etc\hosts` (en tant qu'Administrateur)
|
|
```
|
|
notepad C:\Windows\System32\drivers\etc\hosts
|
|
```
|
|
|
|
Ajouter les entrées :
|
|
```
|
|
192.168.1.100 myapp.naval.lan
|
|
192.168.1.100 dashboard.naval.lan
|
|
```
|
|
|
|
Remplacez `192.168.1.100` par l'IP de votre ingress Traefik.
|
|
|
|
## Partie 6 : Renouvellement du certificat
|
|
|
|
Vos certificats expireront. Pour les renouveler :
|
|
|
|
```bash
|
|
cd ~/certs/naval-ca
|
|
|
|
# Générer un nouveau CSR (ou réutiliser la clé existante)
|
|
openssl req -new -key naval-lan-key.pem -out naval-lan-new.csr -config naval-lan.conf
|
|
|
|
# Signer avec la CA
|
|
openssl x509 -req -in naval-lan-new.csr -CA ca-cert.pem -CAkey ca-key.pem \
|
|
-CAcreateserial -out naval-lan-cert-new.pem -days 730 \
|
|
-extensions req_ext -extfile naval-lan.conf
|
|
|
|
# Mettre à jour le secret Kubernetes
|
|
kubectl create secret tls naval-lan-tls \
|
|
--cert=naval-lan-cert-new.pem \
|
|
--key=naval-lan-key.pem \
|
|
-n traefik \
|
|
--dry-run=client -o yaml | kubectl apply -f -
|
|
|
|
# Redémarrer les pods Traefik pour recharger le certificat
|
|
kubectl rollout restart deployment traefik -n traefik
|
|
```
|
|
|
|
## Dépannage
|
|
|
|
### Certificat non approuvé après l'installation
|
|
|
|
- **Vider le cache du navigateur** : Certains navigateurs mettent en cache la validation des certificats
|
|
- **Redémarrer le navigateur** : Nécessaire pour Chrome/Edge sur Windows
|
|
- **Vérifier la chaîne de certificats** : `openssl s_client -connect myapp.naval.lan:443 -showcerts`
|
|
|
|
### Erreur "NET::ERR_CERT_AUTHORITY_INVALID"
|
|
|
|
- Vérifier que le certificat CA est dans le bon magasin
|
|
- Sur Windows, assurez-vous qu'il est dans "Autorités de certification racines de confiance", pas "Intermédiaire"
|
|
- Vérifier que les noms alternatifs du sujet du certificat incluent votre domaine
|
|
|
|
### Firefox affiche toujours un avertissement
|
|
|
|
- Firefox utilise son propre magasin de certificats sur toutes les plateformes
|
|
- Vous devez importer le certificat CA directement dans Firefox
|
|
|
|
### Certificat expiré
|
|
|
|
- Vérifier la validité du certificat : `openssl x509 -in naval-lan-cert.pem -noout -dates`
|
|
- Suivre les étapes de renouvellement de la Partie 6
|
|
|
|
## Considérations de sécurité
|
|
|
|
1. **Protéger votre clé privée CA** (`ca-key.pem`) :
|
|
- Stockez-la en sécurité
|
|
- Envisagez de la chiffrer avec une phrase secrète
|
|
- Conservez des sauvegardes dans des emplacements sécurisés
|
|
|
|
2. **Période de validité du certificat** :
|
|
- Ne la rendez pas trop longue (2 ans maximum recommandé)
|
|
- Configurez des rappels de calendrier pour le renouvellement
|
|
|
|
3. **Contrôle d'accès** :
|
|
- N'installez le certificat CA que sur les machines que vous contrôlez
|
|
- Ne partagez pas votre clé privée CA
|
|
|
|
4. **Isolation réseau** :
|
|
- Gardez votre domaine `.lan` isolé d'Internet
|
|
- Utilisez des règles de pare-feu pour empêcher l'accès externe
|
|
|
|
## Commandes de référence rapide
|
|
|
|
```bash
|
|
# Vérifier les détails du certificat
|
|
openssl x509 -in naval-lan-cert.pem -text -noout
|
|
|
|
# Tester la connexion HTTPS
|
|
curl -v https://myapp.naval.lan
|
|
|
|
# Voir la CA installée sur Linux
|
|
awk -v cmd='openssl x509 -noout -subject' '/BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt | grep -i naval
|
|
|
|
# Voir la CA installée sur Windows (PowerShell)
|
|
Get-ChildItem -Path Cert:\LocalMachine\Root | Where-Object {$_.Subject -like "*Naval*"}
|
|
|
|
# Obtenir l'IP ingress Traefik
|
|
kubectl get svc -n traefik traefik -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
|
|
```
|
|
|
|
## Ressources supplémentaires
|
|
|
|
- [Documentation Traefik](https://doc.traefik.io/traefik/)
|
|
- [Documentation OpenSSL](https://www.openssl.org/docs/)
|
|
- [Secrets TLS Kubernetes](https://kubernetes.io/docs/concepts/configuration/secret/#tls-secrets)
|
|
|
|
---
|
|
|
|
**Créé** : 9 janvier 2026
|
|
**Dernière mise à jour** : 9 janvier 2026
|