2010-04-13 11 views
5

Ich versuche herauszufinden, wie man mit m2crypto die Vertrauenskette von einer öffentlichen Schlüsselversion eines X509-Zertifikats auf eins überprüft einer Menge bekannter Wurzel-CAs, wenn die Kette beliebig lang sein kann. Das SSL.Context-Modul sieht vielversprechend aus, außer dass ich dies nicht im Kontext einer SSL-Verbindung tue, und ich kann nicht sehen, wie die an load_verify_locations übergebenen Informationen verwendet werden.Wie verwende ich M2crypto, um eine X509-Zertifikatskette in einer Nicht-SSL-Einstellung zu validieren

Im Grunde bin ich für die Schnittstelle suchen, der äquivalent ist: openssl überprüfen pub_key_x509_cert

Gibt es so etwas wie das in m2crypto?

Danke.

+0

verwandten http: // Stackoverflow. com/q/4403012/4279 – jfs

Antwort

1

Es gibt eine patch, die möglicherweise etwas aktualisiert werden muss, und es würde Unit Tests für mich benötigen, um es einzuchecken. Beiträge willkommen!

Eine weitere verschachtelte Möglichkeit wäre, eine In-Memory-SSL-Sitzung zu erstellen, in der Sie die Validierung durchführen. Die Twisted wrapper funktioniert effektiv auf diese Weise; Twisted fungiert als dumb network pipe, ohne etwas über die Daten zu wissen, und M2Crypto verschlüsselt/entschlüsselt die Daten im Speicher und führt auf der Seite eine Zertifikatsprüfung durch.

2

Ich habe einen anderen M2Crypto-Patch modifiziert und damit können wir ein X509-Zertifikat gegen eine Kette von CAs verifizieren, außerdem erlaubt es die Verwendung von Zertifikatssperrlisten (Certificate Revocation List, CRL).

Das Kernstück der Kettenverifizierung mit M2Crypto ist das Aussetzen von "verify_cert()" auf einem X509_Store_Context. Grundströmung ist:

  1. Fügen Sie Ihre CAs/CRLs zu einem X509_Store
  2. Verwenden Sie ein X509_Store_Context das Zertifikat von Interesse als auch

Mein Patch verbessert die CRL-Unterstützung, um zu überprüfen, wie Ketten Überprüfung ermöglicht. https://bugzilla.osafoundation.org/show_bug.cgi?id=12954#c2

Wir sind diesen Patch als Teil Pulp verwenden, haben wir eine Wiki-Seite, unterhalb derer auf einige weitere Informationen teilt, wie wir die Überprüfung mit einer Kette tun: https://fedorahosted.org/pulp/wiki/CertChainVerification

+0

Zusätzlich haben wir eine Reihe von Unittests, die unten die grundlegende Kettenverifikation zeigen: http://git.fedorahosted.org/git/?p=pulp.git;a=blob;f=playpen/certs /chain_example/test_chain_verify.py;hb=HEAD Skripte zum Einrichten der Testdaten sind hier: http://git.fedorahosted.org/git/?p=pulp.git;a=tree;f=playpen/certs/Kettenexample le; hb = HEAD –

+0

es scheint, dass Ihr Patch nicht mit openssl 0.9.8e funktioniert. –