Wie stelle ich sicher, dass stunnel alle CA-Zwischenzertifikate sendet?

13

Einige Computer, aber nicht die meisten, lehnen das SSL-Zertifikat von meinem Webserver ab. Das Problem scheint zu sein, dass einige Computer die CA-Zertifikate ablehnen. Das Problem tritt anscheinend unter Mac OS X 10.6 auf, wenn es nicht vollständig aktualisiert wurde.

Laut http://www.sslshopper.com/index.php?q=ssl-checker.html#hostname=beta.asana.com gibt es kein Problem.

Laut http://certlogik.com/sslchecker/ werden keine Zwischenzertifikate gesendet.

Mein Zertifikat stammt von Starfield Technologies und wird sf_bundle.crtvon hier aus verwendet: certs.godaddy.com/anonymous/repository.seam

Ich verarbeite SSL auf meinem Server über Stunnel mit den folgenden Schritten stunnel.conf:

cert = $CODEZ/admin/production/proxy/asana.pem
CAfile = $CODEZ/admin/production/proxy/sf_bundle.crt
pid =
client = no

[<forwarded port>]
accept = 443
connect = 8443

Irgendwelche Ideen, was ich falsch machen könnte?

Jack Stahl
quelle

Antworten:

17

Mit dieser CAFileOption wird eine Zertifizierungsstelle für die Verwendung für Clientauthentifizierungszertifikate konfiguriert. das ist nicht was du willst

Stattdessen möchten Sie die Datei in der certOption erstellen , die die gesamte anwendbare Zertifikatkette enthält. Sie möchten eine Sicherungskopie dieser Datei speichern und dann eine neue erstellen. Grundsätzlich werden die beiden Dateien so formatiert kombiniert:

-----BEGIN CERTIFICATE-----
(certificate from asana.pem file pasted here)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(intermediate certificate here; copy-paste the top chunk from the bundle)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(root certificate here; copy-paste the bottom chunk from the bundle)
-----END CERTIFICATE-----

Dadurch wird stunnel gezwungen, den Clients die vollständige Zertifikatskette zu präsentieren.

Ein weiterer Leckerbissen; Der openssl s_clientBefehl ist sehr nützlich, um Probleme mit der Zertifikatkette zu testen und um zu überprüfen, wie Ihr Dienst seine Zertifikate präsentiert.

Bearbeiten: Ok .. die Kette dieses Zertifikatsbündels ist drei-tief, aber die Vertrauenskette sieht zwei-tief aus. Etwas stimmt nicht.

Das Top-Zertifikat ("Starfield Secure Certification Authority") wird von einem Aussteller mit dem Namen "Starfield Class 2 Certification Authority" mit einem Fingerabdruck ad7e1c28signiert, der mit ... beginnt sollte genau dasselbe Zertifikat sein, einen Fingerabdruck haben, der mit beginnt 363e4734, und ein Ablaufdatum 10 Jahre früher. Dann ist das dritte (Root-) Zertifikat der Unterzeichner des enthaltenen Zwischenzertifikats. Aber keines dieser beiden Zertifikate hat irgendeine Beziehung zum ersten!

Wenn das keinen Sinn ergab, mach dir keine Sorgen. Zusammenfassung: Schlampige Arbeit, jemand hat den Ball, der dieses Zertifikats-Bundle baut, ernsthaft fallen lassen. Am besten exportieren Sie die Dateien im Base-64-Format aus einem Browser, der die Kette erfolgreich validiert, und fügen sie in das dort aufgeführte Format ein.

Da dies ein verwirrendes Durcheinander ist, habe ich Ihren DNS-Namen erraten und mir das Zertifikat geholt, und ich denke, dies sollte die vollständige Kette sein, die Sie benötigen: http://pastebin.com/Lnr3WHc8

Shane Madden
quelle
Danke das war super nützlich! Ich kann nicht upvoten, weil ich nicht die Wiederholungspunkte habe, aber ich würde :-)
Jack Stahl
@Jack Wenn Ihr Problem behoben ist, können Sie die Antwort auch bei niedrigen Wiederholungszahlen akzeptieren. Ich habe den Beitrag bearbeitet, um zu verdeutlichen, dass das von ihnen bereitgestellte Zertifikat-Bundle durcheinander ist.
Shane Madden
1

Qualys SSLLabs ist sehr praktisch, um Ihre Konfiguration nach Änderungen zu überprüfen.

https://www.ssllabs.com/ssldb/analyze.html

Überprüft, dass Sie haben

  • Starke Chiffren aktiviert
  • schwache Chiffren deaktiviert
  • die Zertifikatskette vollständig und in der richtigen Reihenfolge
Ben Walding
quelle
1

Für alle anderen, die mit diesem Problem konfrontiert sind, hat Shane's Post den Trick getan, obwohl ich auch die CAFile einschließen musste. Stellen Sie auch beim Erstellen der Kette sicher, dass Sie die Anweisungen zur Benennung der Dateien gemäß diesem Artikel befolgen

Um den zu verwendenden Dateinamen zu bestimmen, können Sie das mit OpenSSL gelieferte Programm c_hash verwenden (im /usr/local/ssl/miscVerzeichnis):

c_hash some_certificate.pem
a4644b49.0 => some_certificate.pem

In dem obigen Fall würden Sie die Datei also in umbenennen a4644b49.0.
(Beachten Sie, dass nach dem Punkt im Dateinamen eine Null und nicht der Buchstabe 'O' steht.)

Wenn Sie nicht über das c_hashProgramm verfügen , können Sie den entsprechenden OpenSSL-Befehl ausführen, um den Hash-Wert zu ermitteln:

openssl x509 -hash -noout -in some_certificate.pem
a4644b49

Und wenn Sie mit diesem Problem konfrontiert sind, weil Sie versuchen, Websockets mit Android Cordova zu verwenden, müssen Sie Ihren Cordova-Whitelist-Inhalten manuell wss hinzufügen, da * nur http und https enthält.

BrightEyed
quelle
Auf dem Artikel, auf den Sie verlinken, befindet sich oben ein großes rotes Banner mit der Aufschrift Diese Seite ist veraltet . Sind Sie sicher, dass diese Informationen zum Zeitpunkt der Veröffentlichung korrekt sind? Schreiben?
Austin
2
Positiv, zumindest für den angegebenen Teil. stunnel wird wackeln, es sei denn, Sie benennen die Zertifikatskette als Hash der Datei.
BrightEyed
Auch das Anhängen der .0 war für uns nicht erforderlich. Danke übrigens für die Rechtschreibkorrektur, die Post nach einer langen Nacht weggeschmissen hat; D
BrightEyed
Super, ich bin froh, die Bestätigung zu hören. Ich verstehe, ich bin jetzt an meinem 3. langen Tag in Folge. (11, dann 14 Stunden, heute können es noch 14 Stunden sein.)
austinian
1
Eeesh, lebe den IT-Traum: D
BrightEyed