Dépannage des problèmes de certificat SSL
Même avec un processus de vérification approprié, vous pouvez rencontrer des problèmes de certificat SSL lorsque vous travaillez avec des registres Docker. Apprenons à identifier et à résoudre les problèmes les plus courants.
Problèmes courants de certificat SSL
Les problèmes de certificat SSL les plus fréquents incluent :
- Certificats auto-signés
- Certificats expirés
- Incompatibilités de nom d'hôte de certificat
- Autorités de certification non fiables
Créons un répertoire pour simuler et dépanner ces problèmes :
mkdir -p ~/project/ssl-lab/troubleshooting
cd ~/project/ssl-lab/troubleshooting
Création d'un certificat auto-signé de test
Tout d'abord, créons un certificat auto-signé pour comprendre comment les gérer :
openssl req -newkey rsa:2048 -nodes -keyout registry.key -x509 -days 365 -out registry.crt -subj "/CN=registry.example.com"
Cette commande crée :
- Une clé privée (
registry.key)
- Un certificat auto-signé (
registry.crt) valable pendant 365 jours
Examinons notre certificat auto-signé :
openssl x509 -in registry.crt -text -noout | grep -E "Issuer|Subject|Not"
Notez que dans un certificat auto-signé, l'émetteur et le sujet sont les mêmes, car le certificat s'est signé lui-même.
Configuration de Docker pour faire confiance à un certificat auto-signé
Pour que Docker fasse confiance à un certificat auto-signé, vous devez généralement l'ajouter au répertoire des certificats Docker. Créons la structure de répertoire nécessaire :
sudo mkdir -p /etc/docker/certs.d/registry.example.com:5000
sudo cp registry.crt /etc/docker/certs.d/registry.example.com:5000/ca.crt
Après avoir ajouté un certificat, vous redémarreriez normalement Docker :
## Nous ne redémarrerons pas réellement Docker dans ce lab
echo "Dans un environnement réel, vous exécuteriez : sudo systemctl restart docker"
Gestion des certificats expirés
Simulons la vérification d'un certificat expiré en en créant un avec une date d'expiration passée :
openssl req -newkey rsa:2048 -nodes -keyout expired.key -x509 -days -30 -out expired.crt -subj "/CN=expired.example.com"
Examinons maintenant le certificat expiré :
openssl x509 -in expired.crt -text -noout | grep -E "Issuer|Subject|Not"
Vous verrez que la date "Not After" est dans le passé, ce qui signifie que le certificat est expiré.
Configuration des registres non sécurisés
Dans certains cas, vous devrez peut-être utiliser des registres avec des problèmes de certificat. Docker vous permet de marquer des registres spécifiques comme "non sécurisés" :
cat > daemon.json << 'EOF'
{
"insecure-registries": [
"registry.example.com:5000",
"expired.example.com:5000"
]
}
EOF
echo "Dans un environnement réel, vous placeriez ce fichier à /etc/docker/daemon.json"
cat daemon.json
Cette configuration indique à Docker d'ignorer la vérification du certificat pour ces registres, ce qui peut être utile pour les environnements de test, mais doit être évité en production.
Script pour vérifier l'expiration du certificat
Créons un script utile pour vérifier si un certificat est sur le point d'expirer :
cat > check_expiration.sh << 'EOF'
#!/bin/bash
CERT_FILE=$1
DAYS_WARNING=${2:-30}
if [ ! -f "$CERT_FILE" ]; then
echo "Certificate file not found: $CERT_FILE"
exit 1
fi
## Get expiration date in seconds since epoch
EXPIRY=$(openssl x509 -in "$CERT_FILE" -noout -enddate | cut -d= -f2)
EXPIRY_SECONDS=$(date -d "$EXPIRY" +%s)
NOW_SECONDS=$(date +%s)
SECONDS_LEFT=$((EXPIRY_SECONDS - NOW_SECONDS))
DAYS_LEFT=$((SECONDS_LEFT / 86400))
echo "Certificate: $CERT_FILE"
echo "Expires on: $EXPIRY"
echo "Days remaining: $DAYS_LEFT"
if [ $DAYS_LEFT -lt 0 ]; then
echo "CRITICAL: Certificate has EXPIRED!"
exit 2
elif [ $DAYS_LEFT -lt $DAYS_WARNING ]; then
echo "WARNING: Certificate will expire in less than $DAYS_WARNING days!"
exit 1
else
echo "OK: Certificate is valid for more than $DAYS_WARNING days."
exit 0
fi
EOF
chmod +x check_expiration.sh
Testons notre script avec les deux certificats :
./check_expiration.sh registry.crt
./check_expiration.sh expired.crt
Vous verrez que le script identifie correctement le certificat valide et celui expiré.