35 votes

Difficulté à comprendre la vérification de la chaîne des certificats SSL

Mon application utilise le protocole SSL pour communiquer en toute sécurité avec un serveur et elle a des difficultés à vérifier la chaîne de certificats. La chaîne ressemble à ceci :

Autorité de certification Entrust.net Secure Server -> DigiCert Global CA -> *.ourdomain.com

Nous utilisons un magasin de certificats tiré de Mozilla. Il contient le certificat Entrust.net, mais pas celui de DigiCert Global CA.

Si j'ai bien compris, une autorité intermédiaire n'a pas besoin d'être fiable tant que l'autorité racine l'est, mais la vérification échoue :

% openssl verify -CAfile mozilla-root-certs.crt ourdomain.com.crt
error 20 at 0 depth lookup:unable to get local issuer certificate

Dois-je donc faire explicitement confiance à l'AC globale de DigiCert pour que la vérification passe ? Cela semble incorrect. Mais dites-le moi !

EDIT : Je comprends maintenant que le fichier de certificat doit être disponible pour OpenSSL dès le départ. Quelque chose comme ceci fonctionne :

% openssl verify -CAfile mozilla-root-certs.crt -untrusted digicert.crt ourdomain.com.crt
ourdomain.com.crt: OK

Cela me permet de fournir une copie de l'autorité de certification DigiCert sans dire explicitement "Je lui fais confiance", toute la chaîne devant encore être vérifiée.

Mais il est certain que des navigateurs comme Firefox ne seront pas toujours livrés avec une copie de tous les certificats dont ils auront besoin. Il y aura toujours de nouvelles autorités de certification et le but est d'utiliser la sécurité du certificat racine pour s'assurer que toutes les autorités de certification intermédiaires sont valides. N'est-ce pas ? Alors comment hace ce travail ? Est-ce que c'est vraiment aussi bête que ça en a l'air ?

17voto

David Points 20209

Les certs intermédiaires doivent être installés sur vos serveurs web ainsi que les certs pour votre propre domaine. J'ai eu le même problème la semaine dernière... Firefox semble être plus pointilleux que les autres navigateurs à ce sujet.

8voto

uma Points 89

Je suis confus - pourquoi les certitudes intermédiaires devraient-elles être installées sur les navigateurs ? Le serveur ne devrait-il pas envoyer l'ensemble de la chaîne de certificats lors d'une poignée de main SSL ? hôte1 -> CA1 -> RootCa

et si le certificat RootCA fait partie de l'ensemble des AC racine de confiance du navigateur, alors le certificat host1 serait accepté. Ai-je mal compris ?

7voto

telveer Points 51

Voici la manière correcte de vérifier un certificat provenant d'un serveur web

  • Le client maintient une liste de certificats racine de CA de confiance.
  • Les serveurs Web devraient renvoyer les informations suivantes Certificat du serveur - obligatoire
  • Certificat(s) intermédiaire(s) - requis Certificat de l'autorité de certification racine - non requis/optionnel

Lorsqu'un client se connecte à un serveur, il obtient le certificat du serveur et le ou les certificats intermédiaires du serveur. Le client construit ensuite une chaîne de confiance à partir du certificat du serveur, en passant par le(s) certificat(s) intermédiaire(s), jusqu'à l'un des certificats racine de l'AC auquel il fait confiance. Les certificats racine sont toujours auto-signés - c'est donc là que la chaîne s'arrête.

Voici une commande simple pour tester un certificat de serveur web en utilisant openssl

openssl s_client -CAfile <root ca file> -quiet -showcerts -connect IP:PORT

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X