Aus den Kommentaren zu meiner ersten Antwort sehe ich, dass es ein allgemeines Missverständnis gibt, was "ein Zertifikat bedeuten bedeutet". Ich werde versuchen, hier eine kurze Erklärung zu schreiben, um einige der Illusionen zu beseitigen.
Bei der Zertifikatsprüfung wird eine Signatur der Metadaten des Zertifikats (d. H. Betreff, Gültigkeitszeitraum, Erweiterungen usw.) auf eine kryptografische Signatur überprüft. Wenn Sie für die Validierung nur ein selbstsigniertes Zertifikat haben, können Sie es nicht von einem anderen selbstsignierten Zertifikat mit genau denselben Metadaten unterscheiden, sondern von einem anderen Schlüssel, es sei denn, Sie kennen den Schlüssel des Schlüsselzertifikats im Voraus. Und vergessen Sie nicht, dass Sie alle diese Verifizierungsprozedur einrichten, um die Anforderung zu entfernen, dieses Wissen im Voraus zu haben. Durch die regelmäßige Überprüfung von Zertifikaten können Sie die Voraussetzungen für die Nutzung von vorinstalliertem Know-how, das aus Zertifikaten von Drittanbietern, auch "CA-Zertifikate" genannt, besteht, nicht vollständig beseitigen. Da dieses Wissen vorab geteilt wird, können diese Zertifikate selbst signiert sein, aber denken Sie daran, dass Sie Informationen über die Gültigkeit dieser Zertifikate erhalten haben, die nicht aus dem Verifizierungsprozess, sondern aus etwas äußerem Wissen stammen. Wenn Sie über eine Reihe vertrauenswürdiger CA-Zertifikate verfügen, die zwischen Peers verteilt werden, können Sie diese verwenden, um andere Zertifikate zu signieren und Signaturen anhand des vorinstallierten Wissens vertrauenswürdiger Zertifizierungsstellen zu prüfen.
Wenn Sie jedoch keine zusätzlichen Kenntnisse über ein selbstsigniertes Zertifikat mit Ausnahme des Zertifikats selbst haben, können Sie keine Annahmen über das Vertrauen in dieses Zertifikat machen, da es sowohl von bösartigen Hackern als auch von vertrauenswürdigen Servern ausgegeben werden kann.
Bitte erwerben Sie einige Kenntnisse über Man in the middle attack, Public key infrastructure und Public key cryptography im Allgemeinen, bevor Sie irgendeine Art von Zertifikatsverifizierungsprozeduren implementieren.
Bitte haben Sie Verständnis, dass die blinde Verifizierung eines selbstsignierten Zertifikats Sie selbst vor einem cleveren Hacker in Ihrem eigenen Netzwerk nicht schützt, auch wenn Sie die Internetsicherheit im Allgemeinen nicht berücksichtigen.
Bearbeiten: Frage Autor stellte klar, dass er tatsächlich suchte nach einer Verisign (oder anderen CA) Signatur auf einem Zertifikat mit M2Crypto-Bindungen zu überprüfen. Hier sind zwei Beispiele:
from M2Crypto import X509, SSL
# manual validation of a signature on a certificate using a given CA cert:
ca = X509.load_cert('/path/to/ca_cert.pem')
cert = X509.load_cert('certificate_to_validate.pem')
print "Verification results:", cert.verify(ca.get_pubkey())
# adding a given CA cert to the SSL Context for verification
ctx = SSL.Context()
# load a certificate from file
ctx.load_verify_locations(cafile='/path/to/ca_cert.pem')
# or use all certificate in a CA directory
ctx.load_verify_locations(capath='/path/to/ca/dir')
# or you can specify both options at the same time.
Wenn Sie ein Verzeichnis mit vielen CA-Zertifikate verwenden werden (die oft bequemer ist) müssen Sie jedes Zertifikat <hash>.0
umbenennen wo <hash>
der Hash-Wert des Zertifikats unterliegt (erhalten mit openssl x509 -noout -hash -in cert.pem
).
Sorry, meine Frage war falsch. – Bhargava
Ich war tatsächlich auf der Suche nach einer Verisign-signierten Zertifikatsverifizierung mit M2Crypto. – Bhargava
Ich habe die Antwort mit M2Crypto-Beispielen aktualisiert. – abbot