Différence entre SSLCertificateFile et SSLCertificateChainFile?

35

Normalement, avec un hôte virtuel, un SSL est installé 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 l'activation de SSL pour un seul domaine sur un serveur avec plusieurs hôtes, cette configuration fonctionnera-t-elle?

Et quelle est la différence entre SSLCertificateFileet SSLCertificateChainFile? Le client a acheté une clé de CA à GoDaddy. On dirait que GoDaddy ne fournit qu’un SSLCertificateFilefichier (.crt) et un SSLCertificateKeyFile (fichier .key) et non pasSSLCertificateChainFile .

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

De plus, existe-t-il un chemin canonique où ces fichiers doivent être placés?

chrisjlee
la source
1
Les endroits où je vois le plus souvent les personnes qui déposent les fichiers de certificat se trouvent dans /etc/ssl, /usr/local/etc/sslou dans un sslsous - répertoire spécifique au site Web (par exemple, /home/www/example.com/datale site Web home/www/example.com/sslcontient-il les certificats)?
Chris S

Réponses:

49

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

Ce dont vous avez toujours besoin est un SSLCertificateFileavec unSSLCertificateKeyFile contenant la bonne clé pour ce certificat.

Le problème, c'est que si tout ce que vous donnez à Apache est le certificat, alors tout ce qu'il a à donner aux clients qui se connectent 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 disposent d’un grand nombre de certificats d’autorité de certification (racine et intermédiaires) sur lesquels il est possible de rechercher une relation de signature correspondante afin d’établir une relation de confiance. Cependant, parfois cela ne fonctionne pas; le plus souvent, le problème que vous rencontrez est un client qui ne détient pas le certificat pour une autorité de certification intermédiaire signant votre certificat.

C'est là que la chaîne entre; Cela permet à Apache de montrer au client exactement à quoi ressemble la relation de confiance, ce qui peut aider un client à remplir les espaces vides entre votre certificat, une racine de confiance et l’intermédiaire qu’ils ne connaissent pas. La chaîne peut être incluse dans votre configuration de deux manières:

  • Incorporé dans le même fichier que vous avez défini pour votre SSLCertificateFile, sur de nouvelles lignes après le certificat de serveur dans l’ordre (la racine doit être en bas). Si vous le configurez ainsi, vous voudrez SSLCertificateChainFilepointer exactement le même fichier que SSLCertificateFile.
  • Dans un fichier séparé configuré dans la SSLCertificateChainFiledirective; le certificat de l'autorité de certification qui a émis le certificat du serveur doit figurer en premier dans le fichier, suivi de tous les autres à 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 finira par causer un problème avec un navigateur ou un autre.

Shane Madden
la source
2
Je pense que "généralement ça marche bien" ne s'applique plus vraiment aux certificats GoDaddy, si l'intermédiaire n'est pas inclus. En fait, je ne suis même pas sûr que cela s'applique également à des types comme Verisign et Thawte, car ils ont décidé de rendre les certs du site plus éloignés de ceux de base inclus dans le navigateur. J'imagine que cela facilite la révocation, puisqu'il est plus simple de tuer les intermédiaires.
cjc
"Intégré au fichier SSLCertificateFile": J'aurais souhaité que cela fonctionne, mais il semble que ce ne soit pas le cas et que cela ne soit pas mentionné dans la documentation. Votre chaîne doit être mis en SSLCertificateChainFile.
Steve Kehlet
@SteveKehlet Vous avez raison de dire que ce n'est pas documenté, mais cela a déjà fonctionné avec succès. Comment avez-vous formaté le fichier tout-en-un?
Shane Madden
1
@SteveKehlet En fait, vous avez raison, je me suis souvenu de mal; la manière dont je l'avais configuré pour un fichier unique consistait à avoir les deux SSLCertificateFileet à SSLCertificateChainFileindiquer le même fichier combiné, ce qui fonctionne - modifie ma réponse pour corriger ce problème.
Shane Madden
@ShaneMadden Beautiful! Ça marche! Merci beaucoup d'avoir compris cela.
Steve Kehlet
4

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

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

Voici un peu plus de discussion.

http://support.godaddy.com/help/868/certificat-intermédiaire-

Le courrier électronique de GoDaddy vous expliquant 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 montée en gamme.

En ce qui concerne 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. cert à celui qui appartient à une autorité de certification connue du navigateur.

cjc
la source
2

J'aimerais ajouter aux bonnes réponses précédentes concernant 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 un 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.

Koos van den Hout
la source