Erreurs SSL courantes : causes et solutions

Un avertissement de certificat a presque toujours une cause simple. Voici les cas les plus fréquents et la commande qui permet de les identifier.

Les messages des navigateurs et leur cause

Message Cause Section
NET::ERR_CERT_DATE_INVALID (Chrome), SEC_ERROR_EXPIRED_CERTIFICATE (Firefox) Certificat expiré Certificat expiré
NET::ERR_CERT_COMMON_NAME_INVALID (Chrome), SSL_ERROR_BAD_CERT_DOMAIN (Firefox) Nom absent du certificat Nom de domaine incorrect
NET::ERR_CERT_AUTHORITY_INVALID (Chrome), SEC_ERROR_UNKNOWN_ISSUER (Firefox) Chaîne incomplète ou autorité inconnue Chaîne de certification incomplète

Certificat expiré

Le navigateur signale une date de validité dépassée (NET::ERR_CERT_DATE_INVALID, SEC_ERROR_EXPIRED_CERTIFICATE). Contrôlez les dates du certificat réellement présenté :

echo | openssl s_client -connect www.exemple.fr:443 -servername www.exemple.fr 2>/dev/null | openssl x509 -noout -dates

Si la date est dépassée alors que vous avez déjà réémis le certificat, le serveur n’a pas été rechargé ou un autre serveur sert encore l’ancien fichier. Avec des certificats de plus en plus courts (calendrier), le suivi des échéances devient une tâche régulière. Voir aussi renouveler ou réémettre.

Nom de domaine incorrect

L’avertissement (NET::ERR_CERT_COMMON_NAME_INVALID, SSL_ERROR_BAD_CERT_DOMAIN) indique que le nom demandé ne figure pas dans le certificat. Affichez les noms couverts :

echo | openssl s_client -connect www.exemple.fr:443 -servername www.exemple.fr 2>/dev/null | openssl x509 -noout -subject -ext subjectAltName

Causes fréquentes : exemple.fr et www.exemple.fr sont deux noms distincts ; un certificat wildcard ne couvre qu’un niveau de sous-domaine (voir wildcard ou multi-domaines) ; le serveur répond avec le certificat d’un autre site parce que le nom de serveur (SNI) n’est pas configuré.

Chaîne de certification incomplète

Les messages varient : NET::ERR_CERT_AUTHORITY_INVALID dans Chrome, SEC_ERROR_UNKNOWN_ISSUER dans Firefox, unable to get local issuer certificate ou verify error:num=21 avec OpenSSL. Le serveur ne présente pas les certificats intermédiaires. Placez dans un seul fichier votre certificat puis les intermédiaires, et utilisez-le dans la configuration du serveur : voir installer un certificat.

La clé ne correspond pas au certificat

nginx affiche key values mismatch, Apache refuse de démarrer. Comparez l’empreinte de la clé publique du certificat et celle de la clé privée :

openssl x509 -in www.exemple.fr.crt -noout -pubkey | openssl sha256
openssl pkey -in www.exemple.fr.key -pubout | openssl sha256

Les deux empreintes doivent être identiques. Si ce n’est pas le cas, la clé n’est pas celle de la CSR envoyée : retrouvez la bonne clé ou demandez une réémission avec une nouvelle CSR (générer une CSR).

Contenu mixte

La page se charge en HTTPS mais certaines images, scripts ou feuilles de style sont appelés en http://. Le navigateur les bloque ou signale la page comme partiellement sécurisée. Corrigez les URL en https:// ou en chemins relatifs.

Protocole non pris en charge

Un client ancien ne peut pas négocier avec un serveur qui n’accepte que TLS 1.2 et 1.3, ce qui est la configuration recommandée. Mettez le client à jour plutôt que de réactiver SSL 3.0, TLS 1.0 ou TLS 1.1.

Vous ne trouvez pas la cause

Notez le message exact et la sortie de openssl s_client, puis contactez-nous depuis votre espace client en les joignant.

Mon certificat est installé mais le navigateur affiche toujours l'ancien.

Le serveur n'a probablement pas été rechargé, ou plusieurs serveurs se partagent le domaine et l'un d'eux sert encore l'ancien certificat. Rechargez le service puis vérifiez la date avec la commande openssl s_client.

Que signifie « key values mismatch » ?

La clé privée configurée n'est pas celle qui a servi à créer la CSR. Comparez l'empreinte de la clé publique du certificat et celle de la clé privée : elles doivent être identiques. Sinon, demandez une réémission avec une nouvelle CSR.

Pourquoi le certificat est-il valide sur mon navigateur mais pas sur une application ?

Souvent parce que la chaîne est incomplète : un navigateur peut retrouver un certificat intermédiaire manquant, pas toujours une application ou une bibliothèque. Installez le certificat avec ses intermédiaires dans le fichier fullchain.