Unterschied zwischen SSLCertificateFile und SSLCertificateChainFile?

35

Normalerweise wird bei einem virtuellen Host ein SSL mit den folgenden Anweisungen eingerichtet:

Listen 443 

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

Von: Funktioniert diese Konfiguration zum Aktivieren von SSL für eine einzelne Domain auf einem Server mit mehreren vhosts?

Was ist der Unterschied zwischen SSLCertificateFileund SSLCertificateChainFile? Der Kunde hat einen CA-Schlüssel von GoDaddy gekauft. Es sieht so aus, als ob GoDaddy nur eine SSLCertificateFile(.crt-Datei) und eine SSLCertificateKeyFile (.key-Datei) bereitstellt und nicht at SSLCertificateChainFile.

Funktioniert mein ssl auch ohne SSLCertificateChainFilePfadangabe?

Gibt es auch einen kanonischen Pfad, in dem diese Dateien abgelegt werden sollen?

chrisjlee
quelle
1
Die am häufigsten vorkommenden Orte, an denen Leute die Zertifikatsdateien ablegen /etc/ssl, /usr/local/etc/sslsind oder in einem sslfür die Website spezifischen Unterverzeichnis (z. B. /home/www/example.com/datahat die Website dann home/www/example.com/ssldie Zertifikate).
Chris S

Antworten:

49

Genau genommen brauchen Sie die Kette nie, damit SSL funktioniert.

Was Sie immer brauchen, ist ein SSLCertificateFilemit SSLCertificateKeyFiledem richtigen Schlüssel für dieses Zertifikat.

Das Problem ist, dass, wenn Sie Apache nur das Zertifikat geben, es für die Verbindung mit Clients nur das Zertifikat ist, das nicht die ganze Geschichte über dieses SSL-Zertifikat erzählt. Es heißt: "Ich bin von jemandem unterschrieben, aber ich werde Ihnen nichts darüber erzählen."

Dies funktioniert normalerweise einwandfrei, da die meisten Client-Systeme über einen großen Bestand an CA-Zertifikaten (sowohl Root- als auch Intermediate-Zertifikate) verfügen, die auf eine übereinstimmende Signaturbeziehung überprüft werden können, um Vertrauen herzustellen. Manchmal funktioniert dies jedoch nicht. Meistens ist das Problem, auf das Sie stoßen, ein Client, der nicht über das Zertifikat einer Zwischenzertifizierungsstelle verfügt, die Ihr Zertifikat signiert hat.

Hier kommt die Kette ins Spiel. Damit kann Apache dem Client genau zeigen, wie die Vertrauensbeziehung aussieht. Auf diese Weise kann ein Client die Lücken zwischen Ihrem Zertifikat, dem Stamm, dem er vertraut, und dem Zwischenprodukt, das er nicht kennt, ausfüllen. Die Kette kann auf zwei Arten in Ihre Konfiguration aufgenommen werden:

  • Eingebettet in dieselbe Datei, die Sie für Ihre festgelegt haben SSLCertificateFile, in neue Zeilen nach dem Serverzertifikat in der richtigen Reihenfolge (der Stamm sollte sich unten befinden). Wenn Sie es so einrichten, möchten Sie SSLCertificateChainFileauf genau die gleiche Datei verweisen wie SSLCertificateFile.
  • In einer separaten Datei, die in der SSLCertificateChainFileDirektive konfiguriert ist ; Das CA-Zertifikat, das das Serverzertifikat ausgestellt hat, sollte an erster Stelle in der Datei stehen, gefolgt von allen anderen im Stammverzeichnis.

Überprüfen Sie die Zertifikatsdatei, die Sie jetzt haben - ich wette, dass die Daten der Kette nicht enthalten sind. Was normalerweise gut funktioniert, aber irgendwann Probleme mit dem einen oder anderen Browser verursachen wird.

Shane Madden
quelle
2
Ich denke, "funktioniert normalerweise gut" gilt nicht mehr für GoDaddy-Zertifikate, wenn das Zwischenprodukt nicht enthalten ist. Ich bin mir nicht mal sicher, ob es für Leute wie Verisign und Thawte gilt, da sie umgezogen sind, um die Site-Zertifikate von den Basis-Zertifikaten zu entfernen, die im Browser enthalten sind. Ich stelle mir vor, es macht den Widerruf einfacher, da es einfacher ist, die Zwischenprodukte zu töten.
cjc
"Eingebettet in die SSLCertificateFile": Ich wünschte, dies würde funktionieren, aber es scheint nicht zu funktionieren und wird in den Dokumenten nicht erwähnt. Ihre Kette muss eingelegt werden SSLCertificateChainFile.
Steve Kehlet
@SteveKehlet Sie haben Recht, dass es nicht dokumentiert ist, aber ich habe es in der Vergangenheit erfolgreich funktionieren lassen - wie haben Sie die All-in-One-Datei formatiert?
Shane Madden
1
@SteveKehlet Eigentlich hast du recht, ich erinnere mich falsch; Die Art und Weise, wie ich es für eine einzelne Datei eingerichtet hatte, bestand darin, beide Dateien zu haben SSLCertificateFileund SSLCertificateChainFileauf dieselbe kombinierte Datei zu verweisen, was funktioniert. Meine Antwort wurde bearbeitet, um dies zu korrigieren.
Shane Madden
@ ShaneMadden Schön! Es klappt! Vielen Dank, dass Sie das herausgefunden haben.
Steve Kehlet
4

Tatsächlich gibt Ihnen GoDaddy eine Zwischenkette:

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

Hier ist noch eine Diskussion.

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

Die E-Mail von GoDaddy, in der Sie erfahren, wie Sie Ihr neues Zertifikat herunterladen können, enthält auch Informationen zur Zwischenzertifikatsdatei. Es ist irgendwo in Richtung Boden, vielleicht nachdem Ihre Augen von der Redewendung und dem Upselling glasig geworden sind.

Was passiert, wenn Sie nicht die richtige SSLCertificateChainFile-Direktive einfügen? In Ihrem Browser wird eine große rote Warnung angezeigt, da Ihre SSL-Site in Browsern nicht validiert wird, da sie der Zertifikatskette Ihrer Site nicht folgen kann cert an eine Zertifizierungsstelle, die dem Browser bekannt ist.

cjc
quelle
2

Zu den bisherigen guten Antworten zum SSLCertificateChainFile möchte ich hinzufügen, dass die Reihenfolge der Zertifikate in dieser Datei ebenfalls wichtig ist. OpenSSL-basierte Clients sortieren die Reihenfolge selbst, aber gnutls-basierte Clients schlagen in einer Kette mit der falschen Reihenfolge fehl.

Testen Sie die Bestellung mit gnutls-cli, wie

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

Dabei ist /etc/ssl/certs/ca-certificates.crt der Speicherort, an dem Ihre Distribution die kombinierten Zertifikate ablegt.

Koos van den Hout
quelle