openssl ungültiges CA-Zertifikat

8

Ich richte Server-zu-Server-OpenVPN mit einer PKI-Infrastruktur ein und kann es nicht zum Laufen bringen. Ich vermute, dass es etwas in der Zertifikatskette ist, aber ich kann nicht erklären, wie. Ich habe eine Offline-Stammzertifizierungsstelle und eine Zertifikatshierarchie. Die Zertifizierungsstellen werden extern von einem Produkt namens EJBCA verwaltet. Bildlich sieht die Kette so aus (mit geänderten Namen):

RootCA -> OnlineSubCA -> SubCA1 -> VPNCA

Ich habe ein Server- und Client-Zertifikat mit der CA VPNCA signiert und habe die Zertifikatkette auf diesen Systemen. Beim Debuggen von OpenVPN habe ich versucht, "openssl s_server" und s_client "zu verwenden, was mich zu der Annahme veranlasste, dass es sich um die CA-Kette handelt. Speziell auf dem Server:

openssl s_server -cert server.cert -key server.key -CAfile chained.pem -verify 5

und auf dem Client

openssl s_client -cert client.cert -key client.key -CAfile chained.pem -verify 5

Der Server spuckt unter anderem zurück:

depth=3 C = CA, O = My Company, CN = OnlineSubCA
verify error:num=24:invalid CA certificate
verify return:1
depth=3 C = CA, O = My Company, CN = OnlineSubCA
verify error:num=26:unsupported certificate purpose
verify return:1
depth=4 C = CA, O = My Company, CN = RootCA, emailAddress = [email protected]
verify return:1
depth=3 C = CA, O = My Company, CN = OnlineSubCA
verify return:1
depth=2 CN = SubCA1, O = My Company, C = CA
verify return:1
depth=1 CN = VPNCA
verify return:1
depth=0 C = CA, ST = , L = , O = My Company, OU = , CN = client1.mycompany.com, emailAddress = [email protected]
verify return:1

und ich bin völlig ratlos zu erklären, wie oder warum dies der Fall ist. OpenVPN schlägt auch mit einem ähnlichen Fehler vom Client fehl:

VERIFY ERROR: depth=3, error=invalid CA certificate: /C=CA/O=My_Company/CN=OnlineSubCA

Ich verwende OpenVPN 2.2.1 und OpenSSL 1.0.1 unter Ubuntu 12.04. Die Zeit ist auf beiden synchron.

Ich weiß nicht, wie ich weiter vorgehen soll. Irgendwelche Ideen / Vorschläge wäre sehr dankbar.

Michael Hart
quelle

Antworten:

16

Dies ist ein Problem mit den X509v3-Erweiterungen. Moderne Zertifikate werden so signiert, dass die genehmigten Verwendungen für diesen Zertifikatstyp angegeben werden. Diese können angezeigt werden, indem das Zertifikat weitergeleitet openssl x509 -textoder der Dateipfad mit angegeben wird -in.

In Ihrem Fall zeigen diese Fehlermeldungen an, dass das von Ihnen angegebene Zertifikat kein CA-Zertifikat ist. (Der größte Hinweis lautet "Nicht unterstützter Zertifikatzweck".) Zeigen Sie mit dem obigen Befehl die Textinformationen des Zertifikats an. Ein gültiges CA-Zertifikat lautet wie folgt:

        X509v3 Basic Constraints:
            CA:TRUE

Ein Nicht-CA-Zertifikat zeigt dies stattdessen an:

        X509v3 Basic Constraints:
            CA:FALSE

Möglicherweise haben Sie Ihre Dateien durcheinander gebracht. Dies ist ziemlich einfach, wenn Sie die Dateien verschieben. openssl x509wird eine Lupe auf den Inhalt der tatsächlichen Zertifikate leuchten.

Andrew B.
quelle
Das ist in der Tat das Problem. Wenn Sie das 2. Zertifikat überprüfen, wird "CA: FALSE" angezeigt. Es scheint so in EJBCA eingerichtet zu sein, was ein Fehler ist. Möglicherweise muss ich es neu erstellen. Danke Andrew!
Michael Hart
Ich bin froh, dass es geholfen hat. :)
Andrew B
7
Darüber hinaus erhalten Sie 26 / nicht unterstützte Zertifikatszwecke, wenn Sie als grundlegende Einschränkung "kritisch" haben, Ihr Zertifikat jedoch nicht von einer der legitimen Behörden signiert / vertrauenswürdig ist (bei diesem Versuch wurde eine selbstsignierte
Stammzertifizierungsstelle verwendet