7 votes

Recevoir une erreur de certificat SSL sur un certificat valide lors de l'accès via Curl

J'ai un certificat SSL wildcard qui alimente *.mysite.com. Le site est accessible à partir de tous les navigateurs sans aucun problème. Il y a aussi un service (sur un serveur différent) avec l'URL : service.mysite.com. Étrangement, lorsque j'accède à service.mysite.com en utilisant curl, j'obtiens ceci :

curl: (60) Problème de certificat SSL: le certificat a expiré

En creusant davantage, j'ai constaté que je pouvais en effet accéder à service.mysite.com à partir d'un serveur Ubuntu 18.04 mais pas à partir d'Ubuntu 14.04. Cela me dit peut-être que mon paquet CA n'est pas en ordre.

Alors j'ai fait ceci :

curl -vv --cacert mysite.ca-bundle.crt https://service.mysite.com

mysite.ca-bundle.crt est celui que j'ai reçu du fournisseur SSL. Mais je reçois toujours exactement la même erreur. Qu'est-ce que je manque ?

19voto

James Mertz Points 390

Vous n'avez pas fourni l'adresse actuelle du site Web, ni le nom du fournisseur SSL, ni aucune autre information sur le certificat, et vous voulez essentiellement que nous devinions les causes possibles.

Je suppose que votre chaîne de certificats se termine par "AddTrust External Root" en tant que CA le plus élevé, et que ce certificat racine a expiré il y a plusieurs heures.

Sectigo, le propriétaire du certificat, a un diagramme de la chaîne - en raison du croisement des anciens certificats de CA par de nouveaux, "AddTrust External Root" était essentiellement un niveau supérieur au-dessus de ce qui serait normalement le vrai certificat racine de l'entreprise. Les nouveaux systèmes d'exploitation verraient les certificats de Sectigo/Comodo comme des CA racines auto-signés, tandis que les anciens les verraient comme des CA intermédiaires en dessous de AddTrust Root.

Ainsi, sur les anciens systèmes d'exploitation qui ne reconnaissent Sectigo que via le croisement par le certificat de CA racine AddTrust, dès que ce dernier expire, toute la chaîne est invalide. Pour résoudre ce problème, vous devez passer à un autre CA que ces systèmes reconnaissent comme racine (vérifiez /etc/ssl/certs).


Il se peut que ces systèmes reconnaissent Sectigo comme un CA racine à part entière. En théorie, il est tout à fait légal pour un certificat de se valider par l'intermédiaire de multiples chaînes, par exemple, un CA peut être simultanément une CA racine et être croisé par un autre CA.

Mais en pratique, de nombreuses bibliothèques clientes TLS ne sont pas très bonnes pour construire des chaînes alternatives et supposent qu'il y a toujours exactement une seule façon de valider un certificat. (Windows est un peu mieux, et les grands navigateurs Web incluent également du code pour gérer cette complexité supplémentaire par rapport à ce que la bibliothèque TLS fournirait probablement.)

Par exemple, les anciennes versions d'OpenSSL étaient très strictes sur les certificats pouvant servir de racines de confiance. Si le serveur envoyait une chaîne "OldCA–NewCA–Intermediate–MyServer", OpenSSL 1.0 n'accepterait que si vous aviez "OldCA" comme certificat de confiance - mais il ne serait pas assez intelligent pour l'accepter si vous aviez "NewCA" à la place.

_

Donc, si Ubuntu 14.04 reconnaît déjà Sectigo comme une autorité de certification, il faut alors corriger la chaîne de certificats envoyée par votre serveur Web - je suppose que supprimer le certificat qui indique "Issuer: AddTrust" devrait suffire.

Disons que l'ancienne chaîne de certificats ressemble à ceci:

[AddTrust External Root]                               [inclus dans l'OS]
+-- USERTrust RSA Certification Authority (Sectigo)    envoyé par votre serveur
    +-- Gandi Standard SSL CA 2                        envoyé par votre serveur
        +-- git.kernel.org                             envoyé par votre serveur

Vous devez la modifier pour que votre serveur cesse d'envoyer le certificat USERTrust signé en croix:

[USERTrust RSA Certification Authority (Sectigo)]      [inclus dans l'OS]
+-- Gandi Standard SSL CA 2                            envoyé par votre serveur
    +-- git.kernel.org                                 envoyé par votre serveur

Vous pouvez également résoudre ce problème du côté client, en supprimant le certificat racine AddTrust.

_

3voto

Justin Points 41

Nous avons rencontré les mêmes problèmes aujourd'hui avec nos 14.04 qui échouent et les 18 qui fonctionnent bien. Il semble que aujourd'hui soit le jour où un support racine populaire a cessé de fonctionner pour les anciennes boîtes Ubuntu. Heureusement, nous venons de mettre hors service les 14s, mais si vous ne pouvez pas le faire, il y a des instructions pour essayer de le faire fonctionner. De plus, notre équipe de DevOps a noté que cela nécessiterait probablement également un gros travail de mise à niveau d'OpenSSL et de le rendre compatible avec les modifications décrites ici. https://support.sectigo.com/articles/Knowledge/Sectigo-AddTrust-External-CA-Root-Expiring-May-30-2020

1voto

Evan Poliquin Points 11

Vous devez supprimer AddTrust External Root de votre cacert.pem ou de votre chaîne de confiance /usr/lib/ssl/certs/AddTrust_External_Root.pem dans mon Linux Mint.

Pour ceux qui se demandent, vous pouvez prendre le cacert.pem chez Mozilla ici : https://curl.haxx.se/docs/caextract.html Ensuite, vous devez supprimer AddTrust External Root.

La suppression de AddTrust External Root force les logiciels à utiliser le chemin de certification correct (lorsque vous en avez plusieurs).

Par exemple, twinoid.com a 3 chemins. Deux d'entre eux sont valides, le dernier contient AddTrust External Root. https://www.ssllabs.com/ssltest/analyze.html?d=twinoid.com&hideResults=on (vous pouvez vérifier les 3 chemins ici)

Évidemment, la correction correcte devrait venir des logiciels qui ne gèrent pas correctement cela mais cette correction temporaire m'a aidé. Certains logiciels comme les navigateurs ont déjà corrigé ce problème il y a quelque temps.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X