Files
Maison/AliExpress/Certificates.fr.md
2026-02-10 12:12:11 +01:00

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