Erreur SSLLabs : This server's certificate chain is incomplete :

Cette erreur est retournée par SSLLabs.com lorsque votre serveur n'envoit pas la chaine complète des certificats SSL au navigateur.


 

Explications :

Un certificat SSL est émis par un certificat SSL intermédiaire. Il est lui-même émis soit par un autre certificat intermédiaire, soit par le certificat SSL racine.
Les certificats intermédiaires et la racine appartiennent à l'Autorité de Certification qui a émis le certificat SSL de l'adresse finale à sécuriser.

Le navigateur du client doit pouvoir "remonter la chaine" afin de s'assurer qu'un certificat SSL a bien été émis par une Autorité de Certification de confiance.
Il est donc recommandé de renseigner tous les certificats dans la configuration du serveur : La chaine des certificats SSL doit être complète.

 


 

Solution : Comment corriger "This server's certificate chain is incomplete" ?


 

Apache 2 :

L'erreur "This server's certificate chain is incomplete" est très simple à corriger sous Apache : Vous n'avez pas spécifié la directive SSLCACertificateFile.
La solution consiste à éditer le VirtualHost contenant la directive SSLCertificateFile puis ajoutez la directive SSLCACertificateFile dans la configuration du VirtualHost :

# Les deux directives ci-dessous semblent avoir été correctement renseignées :
SSLCertificateFile /etc/ssl/certificat-ssl.info/www-certificat-ssl-info.cer
SSLCertificateKeyFile /etc/ssl/certificat-ssl.info/www-certificat-ssl-info.key

# L'erreur "This server's certificate chain is incomplete." provient d'une erreur ou de l'absence de SSLCACertificateFile.
# Vous devez spécifier le chemin vers le certificat racine, puis vers le(s) certificat(s) intermédiaire(s) :
SSLCACertificateFile /etc/ssl/certificat-ssl.info/thawtePrimaryRootCA.cer
SSLCACertificateFile /etc/ssl/certificat-ssl.info/thawteDVSSLCA-G2.cer

 


 

Nginx :

Pour ne pas avoir l'erreur "This server's certificate chain is incomplete", Nginx nécessite que tous les certificats SSL soient concaténés dans un "bundle".
Vous devez donc créer un fichier dans lequel vous allez copier/coller le contenu de tous les certificats SSL (chaine complète) dans l'ordre suivant :

Exemple de concaténation (certificat SSL DV de Thawte) :

cat www-certificat-ssl-info.cer thawteDVSSLCA-G2.cer thawtePrimaryRootCA.cer > bundle.pem

Puis dans la configuration d'Nginx, renseignez :

# Chemin vers le bundle (chaine complète des certificats SSL)
ssl_certificate /etc/ssl/certificat-ssl.info/bundle.pem

 


 

IIS (Internet Informations Services) :

Si vous obtenez l'erreur "This server's certificate chain is incomplete" sous IIS, c'est que vous avez dû importer uniquement le ".cer", et non la chaine complète.
Pour importer la chaine complète dans IIS, vous devez obligatoirement convertir votre certificat SSL X509 (.cer ; .crt ...) vers un autre format : Le PKCS#7 (.p7b)

Exécutez la commande ci-dessous sur un serveur Linux :

openssl crl2pkcs7 -nocrl -certfile www-certificat-ssl-info.cer -certfile thawteDVSSLCA-G2.cer -certfile thawtePrimaryRootCA.cer -out www-certificat-ssl-info.p7b

Il vous sera ensuite possible d'installer le certificat SSL dans IIS grâce au fichier .p7b que vous venez de générer : Il contient la chaine complète.

Si vous ne disposez pas de serveurs Linux pour générer le .p7b, n'hésitez pas à faire appel à votre revendeur de certificats SSL, il vous le fournira sur demande.