Wie kann eine unvollständige SSL-Kette repariert werden?

29

Ich habe ein Go Daddy SSL-Zertifikat installiert und es funktioniert überall außer auf Android.

https://www.ssllabs.com/ssltest/analyze.html sagt, dass die Kette unvollständig ist, und ich habe beim Stapelüberlauf gelesen , dass eine SSL-Kette in der falschen Reihenfolge unter Android fehlschlägt.

Aber wie bringe ich es in Ordnung? Auf meinem Server? SSL-Zertifikat selbst muss neu verschlüsselt werden? Dinge auf FTP verschieben?

Jon
quelle

Antworten:

19

Als ich die Antwort von zakjan verfolgte, hatte ich ein Problem, als ich versuchte, mit jquery eine AJAX-Anfrage auf meinem neu gesicherten Server in einer Android-Webansicht auszuführen. Es funktionierte im Browser, aber nicht in meiner App.

Ich habe diese Seite benutzt: https://certificatechain.io/

Ich habe den Text meiner signierten .crt-Datei eingefügt, die ich von Comodo erhalten habe (positiveSSL), und es gab mir eine Zusammenfassung von allem, was ich brauchte. Ich habe es als meine Domain + "chain.crt" gespeichert (siehe unten)

Dann habe ich in meinen Apache-Konfigurationen so etwas für diesen bestimmten virtuellen Host eingegeben:

SSLEngine On
SSLCertificateFile /etc/ssl/localcerts/example_com.crt
SSLCertificateKeyFile /etc/ssl/localcerts/example.com.key
SSLCACertificateFile /etc/ssl/localcerts/example.com.chain.crt

Danach hatte die Webansicht meiner Android-App kein Problem damit, Ajax zum POST auf meinen Server zu verwenden. Ich habe es auf 2 realen Geräten ausprobiert, von denen eines 2.3.4 und eines 4.something ausführt. Und auf dem Emulator läuft 2.3. Alles hat funktioniert.

Ich hoffe das hilft.

Richard
quelle
1
Der Schlüssel für mich war, die SSLCACertificateFileDirektive hinzuzufügen und auf die CA-Datei zu verweisen, die mir meine Autorität gegeben hat. Es würde nicht funktionieren, wenn ich die anderen Zertifikate einfach mit meiner Zertifikatsdatei verketten würde.
Alex W
In älteren Apachen kann SSLCertificateChainFile anstelle von SSLCACertificateFile verwendet werden (nur für den Fall, dass Sie diesen Schlüssel in Ihrer Konfiguration suchen und ihn nicht finden können).
dr0i
Unglaublich, aber in der @ Richard-Antwort wird die Site certificatechain.io verwendet und auf der Site steht "... inspiriert von cert-chain-resolver von Jan Žák", der diese Frage hier beantwortet hat: superuser.com/a/866523/92500 , danke @zakjan!
Andrés Morales
Das SSLCACertificateFilewar die Zeile, die ich verpasst habe. Anfänglich ging ich davon aus, dass meine Zertifizierungsstelle zu neu ist, da SSL funktioniert, wenn von einigen Browsern / Betriebssystemen angefordert, von anderen jedoch nicht. Durch die Verwendung von decoder.link/sslchecker konnte klargestellt werden , dass meine Konfiguration falsch war, und diese Antwort hatte den Fix. Vielen Dank!!
Josephdpurcell
9

Die Kette war in der CRT-Datei, die das ursprüngliche SSL abarbeitete.

Für GoDaddy gibt es ein 2. Zertifikat - gd_bundle.crt

Kopieren Sie diese Informationen und fügen Sie sie dem auf dem Server installierten crt hinzu.

Das ursprüngliche crt auf dem Server hatte also 1 Zertifikat und danach 3 in derselben Datei. Das ist die Kette.

Ich habe immer noch Anker in Kettenproblemen auf ssllabs.com, aber dies ist kein Problem, nur eine Option zum Ein- oder Auslassen - gemäß https://security.stackexchange.com/questions/24561/ssltest-chain-issues enthält Anker / 24566 # 24566

Jon
quelle
2
Um Kettenprobleme zu beseitigen, entfernen Sie das letzte Zertifikat von gd_bundle.crt
sanmai
7

Sie können das Problem mit der unvollständigen Zertifikatkette manuell lösen, indem Sie alle Zertifikate vom Zertifikat zum vertrauenswürdigen Stammzertifikat verketten (in dieser Reihenfolge exklusiv), um solche Probleme zu vermeiden. Beachten Sie, dass das vertrauenswürdige Stammzertifikat nicht vorhanden sein sollte, da es bereits im Stammzertifikatsspeicher des Systems enthalten ist.

Sie sollten in der Lage sein, Zwischenzertifikate vom Aussteller abzurufen und sie selbst zusammenzufassen. Übrigens, ich habe ein Skript geschrieben, um den Vorgang zu automatisieren. Es benötigt ein Zertifikat, um die Ausgabe korrekt verketteter Zertifikate zu erstellen. https://github.com/zakjan/cert-chain-resolver

Zakjan
quelle
Dies klingt nach einer Lösung, die den lokalen Computer nur dazu "verleitet", zu glauben, dass das Zertifikat korrekt eingerichtet ist.
Alex W
Nee. Das Ausgabezertifikat-Bundle soll auf einen Server hochgeladen werden, der den Inhalt der Website sendet. Jeder Kunde erhält das Zertifikat mit seinen Zwischenprodukten.
Zakjan