2010-11-10 3 views
7

Gibt es eine Möglichkeit für ein Python/Twisted-Programm, sauber die Liste der Stammzertifikate zu verwenden, die Internet Explorer verwendet, um eine SSL-Verbindung zu einem HTTPS-Server zu überprüfen? Die Antworten auf Validate SSL certificates with Python sind sehr hilfreich, aber der Beispielcode ruft die Stammzertifikate ab, indem er das Unix-spezifische Verzeichnis /etc/ssl/certs/*.pem liest und mir ist nicht klar, was das Windows-Äquivalent dazu wäre.Was ist der richtige Weg für ein Python/Twisted-Programm, ein SSL-Zertifikat unter Windows zu validieren?

Antwort

3

Das Windows-Äquivalent lautet "Kopieren /etc/ssl/certs/*.pem von Ihrem Linux-Rechner". Mac und Windows haben verschiedene native APIs, um an ihre jeweiligen Zertifikatspeicher zu gelangen, die Twisted nicht direkt unterstützt. Sie verwenden nicht OpenSSL Zertifikate nativ, und sie stellen sicherlich nicht so einfach ein Layout wie "Verzeichnis der PEM-Dateien". Wenn Sie Ihre Vertrauenswurzeln als PEMs exportieren können, könnten Sie Twisted (naja, wirklich, OpenSSL über PyOpenSSL) bitten, dies auf diese Weise zu überprüfen.

Ich bin abstrakt daran interessiert, dies in einer super-portablen Art und Weise zu tun, aber ich habe es nie wirklich versucht. Hier sind einige Links, die Ihnen den Einstieg erleichtern: SecureTransport reference, Microsoft Cryptography Functions.

In der SecureTransport-Referenz weist die Dokumentation darauf hin, dass SSLGetTrustedRoots veraltet ist, erwähnt aber nicht die Alternative SSLCopyTrustedRoots, die nicht vorhanden ist. Das ist wahrscheinlich die API, mit der du auf einem Mac anfangen willst (über PyObjC). Unter Windows bin ich mir wirklich nicht sicher, außer irgendwo in diesem Stapel von Funktionen gibt es wahrscheinlich einen, der das macht, was du willst, und vielleicht kannst du ihn mit ctypes aufrufen :).