Wie verwende ich m2crypto, um eine X509-Zertifikatkette in einer Nicht-SSL-Einstellung zu validieren

Ich versuche, herauszufinden, wie man, mit m2crypto, validieren die Kette des Vertrauens aus einer Public-Key-Version eines X509-Zertifikat zurück zu einem einer Reihe von bekannten Wurzel CA's, wenn die Kette kann willkürlich lang sein. Das SSL.Context-Modul sieht vielversprechend aus, außer dass ich das nicht im Kontext einer SSL-Verbindung tue und ich kann nicht sehen, wie die an load_verify_locations übergebene Information verwendet wird.

Im Grunde bin ich auf der Suche nach der Schnittstelle, die gleichbedeutend ist: openssl überprüfen pub_key_x509_cert

Gibt es so etwas in m2crypto?

Vielen Dank.

2 Solutions collect form web for “Wie verwende ich m2crypto, um eine X509-Zertifikatkette in einer Nicht-SSL-Einstellung zu validieren”

Es gibt einen Patch , der möglicherweise leicht aktualisiert werden muss, und es würde Unit-Tests für mich brauchen, um es zu überprüfen. Beiträge Willkommen!

Eine weitere gewundene Art und Weise wäre, eine SSL-Sitzung im Speicher zu erstellen, wo Sie die Validierung durchführen. Die verdrehte Wrapper wirkt auf diese Weise effektiv; Twisted fungiert als dumme Netzwerk-Pipe, ohne etwas über die Daten zu wissen, und M2Crypto verschlüsselt / entschlüsselt die Daten im Speicher und macht die Zertifikat-Validierung auf der Seite.

Ich habe einen anderen M2Crypto Patch geändert und damit können wir ein X509 Zertifikat gegen eine Kette von CAs verifizieren und es erlaubt die Verwendung von Certificate Revocation List (CRL) s.

Das Herz der Kettenüberprüfung mit M2Crypto ist es, "verify_cert ()" auf einem X509_Store_Context auszusetzen. Grundfluss ist:

  1. Fügen Sie Ihre CAs / CRLs zu einem X509_Store hinzu
  2. Verwenden Sie einen X509_Store_Context, um das Zertifikat von Interesse zu überprüfen

Mein Patch verbessert die CRL-Unterstützung sowie die Kettenüberprüfung. https://bugzilla.osafoundation.org/show_bug.cgi?id=12954#c2

Wir verwenden diesen Patch als Teil von Pulp, wir haben eine Wiki-Seite unten, die etwas mehr darüber informiert, wie wir die Überprüfung mit einer Kette durchführen: https://fedorahosted.org/pulp/wiki/CertChainVerification

Python ist die beste Programmiersprache der Welt.