Unterschied zwischen SSLCACertificateFile und SSLCertificateChainFile

76

Ich stelle SSL-Seiten auf meinem Webserver bereit und habe eine Frage. Was ist der Unterschied zwischen SSLCACertificateFile und SSLCertificateChainFile?

Wenn ich SSLCertificateChainFile verwende, erhalte ich Warnungen vom japanischen Handybrowser, aber wenn ich einen PC-Browser (wie IE, FF) verwende, gab es kein Problem. Andererseits verursachte SSLCACertificateFile für beide Browser keine Probleme.

Gibt es einen Unterschied, wenn Browser eine Verbindung zu Apache herstellen?

nam
quelle
das ist zu einfach Das Root-Sig befindet sich nicht im Root-Store des Mobiltelefons, was üblich ist

Antworten:

74

SSLCertificateChainFile war die richtige Option, aber diese Anweisung wurde ab Apache 2.4.8 veraltet . Diese Anweisung hat dazu geführt, dass die aufgelistete Datei zusammen mit dem Zertifikat an alle Clients gesendet wurde, die eine Verbindung herstellen.

SSLCACertificateFile (im Folgenden "CACert") ersetzt SSLCertificateChainFile (im Folgenden "Chain") und ermöglicht zusätzlich die Verwendung des betreffenden Zertifikats zum Signieren von Client- Zertifikaten. Diese Art der Authentifizierung ist (zumindest im Moment) ziemlich selten, und wenn Sie sie nicht verwenden, gibt es meiner Meinung nach keinen Grund, ihre Funktionalität durch die Verwendung von CACert anstelle von Chain zu erweitern. Auf der anderen Seite könnte man argumentieren, dass die zusätzliche Funktionalität keinen Schaden anrichtet und CACert alle Fälle abdeckt. Beide Argumente sind gültig.

Wenn Sie den Zertifizierungsanbieter fragen, werden diese natürlich immer auf CACert over Chain drängen, da sie dadurch eine andere Sache (Kundenzertifikate) erhalten, die sie Ihnen möglicherweise später verkaufen können. ;)

BMDan
quelle
Eine andere Sache, die tatsächlich zu berücksichtigen ist, ist der Algorithmus. "Aber seien Sie vorsichtig: Die Bereitstellung der Zertifikatkette funktioniert nur, wenn Sie ein einzelnes Serverzertifikat (entweder RSA oder DSA) verwenden. Wenn Sie ein gekoppeltes RSA + DSA-Zertifikatspaar verwenden, funktioniert dies nur, wenn tatsächlich beide Zertifikate dasselbe verwenden Zertifikatskette. Andernfalls werden die Browser in dieser Situation verwirrt. " ---- httpd.apache.org/docs/2.0/mod/…
Eddie
@Eddie Richtig, obwohl ich glaube, dass es wichtig ist zu erwähnen, dass dies beide Optionen gleichermaßen betrifft. Es ist wahrscheinlich auch erwähnenswert, dass DSA-Zertifikate (gnädigerweise) verschwindend selten sind.
BMDan
20

Tatsächlich können beide gültige Optionen sein.

Verwenden Sie SSLCertificateChainFile, um Ihr von einer öffentlichen Zertifizierungsstelle (VeriSign, RapidSSL usw.) signiertes Zertifikat zu veröffentlichen.

Verwenden Sie SSLCACertificateFile, um Ihre "private" Zertifizierungsstelle bereitzustellen, die Clientzertifikate ausstellen kann, die Sie an einige ausgewählte Benutzer verteilen können. Diese clientZertifikate eignen sich hervorragend für die Authentifizierung (im Vergleich zur grundlegenden Kennwortauthentifizierung) und müssen normalerweise nicht von einer öffentlichen Zertifizierungsstelle verteilt werden (daher können Sie etwas Geld sparen).

Wenn Sie also einem Teil Ihrer Website eine sichere Autorisierung hinzufügen möchten, gehen Sie folgendermaßen vor:

<Directory /var/www/html/authorized>
  SSLVerifyClient require
  SSLVerifyDepth  5

  SSLOptions +StrictRequire
  SSLUserName SSL_CLIENT_S_DN_CN
  SSLRequireSSL
</Directory>

Nur zur kurzen Erläuterung SSLUserName SSL_CLIENT_S_DN_CNwird der authentifizierte Benutzername auf CommonName des Zertifikats im Vergleich zum gesamten Betreff x509 '/ OU = Foo / CN = ...' gesetzt.

Alexander Pogrebnyak
quelle