web-dev-qa-db-fra.com

Différence entre SSLCertificateFile et SSLCertificateChainFile?

Normalement, avec un hôte virtuel, un SSL est configuré avec les directives suivantes:

Listen 443 

SSLCertificateFile /home/web/certs/domain1.public.crt
SSLCertificateKeyFile /home/web/certs/domain1.private.key
SSLCertificateChainFile /home/web/certs/domain1.intermediate.crt

De: Pour activer SSL pour un seul domaine sur un serveur avec plusieurs vhosts, cette configuration fonctionnera-t-elle?

Quelle est la différence entre SSLCertificateFile et SSLCertificateChainFile? Le client a acheté une clé CA auprès de GoDaddy. Il semble que GoDaddy ne fournisse qu'un SSLCertificateFile (fichier .crt) et un SSLCertificateKeyFile (fichier .key) et pas à SSLCertificateChainFile.

Mon SSL fonctionnera-t-il toujours sans un chemin SSLCertificateChainFile spécifié?

Existe-t-il également un chemin canonique où ces fichiers doivent être placés?

36
chrisjlee

À strictement parler, vous n'avez jamais besoin de la chaîne pour que SSL fonctionne.

Ce dont vous avez toujours besoin est un SSLCertificateFile avec un SSLCertificateKeyFile contenant la clé correcte pour ce certificat.

Le problème est que si tout ce que vous donnez à Apache est le certificat, alors tout ce qu'il a à donner aux clients se connectant est le certificat - qui ne raconte pas toute l'histoire de ce certificat SSL. Il dit: "Je suis signé par quelqu'un, mais je ne vais pas vous en parler".

Cela fonctionne généralement bien, car la plupart des systèmes clients ont un grand magasin de certificats d'autorité de certification (à la fois racine et intermédiaire) qu'il peut vérifier pour une relation de signature correspondante pour établir la confiance. Cependant, parfois cela ne fonctionne pas; le plus souvent, le problème que vous rencontrerez est un client qui ne détient pas le certificat pour une autorité de certification intermédiaire qui a signé votre certificat.

C'est là qu'intervient la chaîne; il permet à Apache de montrer au client exactement à quoi ressemble la relation d'approbation, ce qui peut aider un client à remplir les blancs entre votre certificat, une racine en laquelle il a confiance et l'intermédiaire qu'il ne connaît pas. La chaîne peut être incluse dans votre configuration de deux manières:

  • Intégré dans le même fichier que celui que vous avez défini pour votre SSLCertificateFile, sur de nouvelles lignes après le certificat du serveur dans l'ordre (la racine doit être en bas). Si vous le configurez comme ceci, vous voudrez que SSLCertificateChainFile pointe vers le même fichier que SSLCertificateFile.
  • Dans un fichier séparé configuré dans la directive SSLCertificateChainFile; le certificat CA qui a émis le certificat du serveur doit être le premier dans le fichier, suivi par tous les autres en haut de la racine.

Vérifiez le fichier de certificat que vous avez maintenant - je parie qu'il ne contient pas les données de la chaîne. Ce qui fonctionne généralement bien, mais causera éventuellement un problème avec un navigateur ou un autre.

51
Shane Madden

Voici une assez bonne explication des différences ainsi que des impacts observables entre le choix de l'un par rapport à l'autre:

https://stackoverflow.com/questions/1899983/difference-between-sslcacertificatefile-and-sslcertificatechainfile

5
WerkkreW

En fait, GoDaddy vous donne une chaîne intermédiaire:

http://support.godaddy.com/help/5238

Voici quelques discussions supplémentaires.

http://support.godaddy.com/help/868/what-is-an-intermediate-certificate

L'e-mail de GoDaddy vous indiquant comment télécharger votre nouveau certificat contiendra également des informations sur le fichier de certificat intermédiaire. C'est quelque part vers le bas, peut-être après que vos yeux se sont glacés du verbiage et de la vente incitative.

En termes de ce qui se passera si vous n'incluez pas la directive SSLCertificateChainFile appropriée: vous verrez un gros avertissement rouge dans votre navigateur car votre site SSL ne sera pas validé dans les navigateurs, car ils ne peuvent pas suivre la chaîne de certificats de votre site. un certificat appartenant à une autorité de certification connue du navigateur.

4
cjc

Je voudrais ajouter aux bonnes réponses précédentes sur le SSLCertificateChainFile que l'ordre des certificats dans ce fichier est également important. Les clients basés sur OpenSSL trieront l'ordre eux-mêmes, mais les clients basés sur gnutls échoueront sur une chaîne avec l'ordre incorrect.

Testez la commande avec gnutls-cli, comme

gnutls-cli --x509cafile /etc/ssl/certs/ca-certificates.crt -p https wwwsec.cs.uu.nl

où /etc/ssl/certs/ca-certificates.crt est l'emplacement où votre distribution place les certificats combinés.

3
Koos van den Hout