Frage

Ich verwende imaplib und poplib, um die E-Mail-Sammlung mit IMAPS und POP3S für eine sichere Verbindung durchzuführen.Aber soweit ich feststellen konnte, verwendet keine der Bibliotheken eine Zertifizierungsstelle, um die Gültigkeit des erhaltenen Zertifikats zu bestätigen.Stimmt das?Wenn ja, ist es dann möglich, imaplib oder poplib so einzustellen, dass eine Zertifizierungsstelle verwendet wird?

Wenn das nicht stimmt und sie eine Zertifizierungsstelle verwenden, kann mir bitte jemand sagen, wie imaplib/poplib das macht?

Danke.

War es hilfreich?

Lösung

Eine schnelle Überprüfung von iMaplib.py zeigt an, dass er ssl.wrap_socket () verwendet, um den Anruf imap_sl () zu implementieren.Der Anruf von Call to Wrap_Socket () bietet nur 3-Parameter und übergeben den erforderlichen Parameter ca_cert nicht, was Sie benötigen, um die Zertifizierung zu bestätigen.

Sie könnten von IMAP4_SSL erben und die offene () -Methode überschreiben, um den erforderlichen ca_cert zu übergeben.Check out http://docs.python.org/library/sl.html für mehrInfo.

vielleicht so etwas wie:

generasacodicetagpre.

Andere Tipps

Ein weiterer Gedanke ist mir eingetreten, um zu erwähnen.Die Python-SSL-Bibliothek ist auf OpenSSL erstellt.Wenn Sie anfangen, den Server zu erfordern, um Zertifikate bereitzustellen, und dass sie gültig sind, werden Sie schnell auf verschiedenen Aromen von UNIX in Verbindung mit dem Zertifikatspeicher auftreten.

Wenn Sie gerade an einem System arbeiten, das bereits Mozilla / Firefox installiert ist, wird der Cert-Speicher wahrscheinlich ordnungsgemäß eingerichtet.Aber nicht, Sie werden sich nicht um ein paar Tagen kämpfen, um dies richtig zu machen, um richtig zu funktionieren.

Dieser Link half uns immens: http://www.madboa.com/gek/opensssl/

Beachten Sie besonders auf diesen Link: http://www.madboa.com/Geek / OpenSSL / # Verify-System

Alle Entwickler, die mit OpenSSL arbeiten, sollten diese Site mit einem Lesezeichen bringen.Es ist ein bisschen auf der knorrigen Seite, aber jeder einzelne Eintrag ist das Gewicht in Gold wert!

Weil IMAP4SSL.OPEN von IMAP aufgerufen wird. init Die obige Lösung hilft nicht, da der Benutzer nicht offen () angerufen wird. Sie können IMAP überschreiben. init to ...

kurz: Nur den Parameter für Open () reicht nicht aus.

Ich habe Injektion verwendet:

generasacodicetagpre.

Ich baue gerade etwas in diese Richtung.

Der folgende Code fügt hinzu starttls zu IMAP.Rufen Sie einfach an server.starttls() nach dem Anschließen.Stellen Sie sicher, dass Sie eine Verbindung zum normalen IMAP-Port herstellen.

import imaplib,ssl
def IMAP_starttls(self, keyfile=None, certfile=None,cert_reqs=ssl.CERT_NONE,ca_certs=None):
  if not 'STARTTLS' in self.capabilities:
    raise self.error("STARTTLS extension not supported by server.")
  (resp, reply) = self._simple_command("STARTTLS")
  self.sock = ssl.wrap_socket(self.sock, keyfile, certfile,cert_reqs=cert_reqs,ca_certs=ca_certs)
  self.file = self.sock.makefile('rb')

imaplib.IMAP4.__dict__['starttls']=IMAP_starttls
imaplib.Commands['STARTTLS']=('NONAUTH',)

PS:Ich wollte dies als Kommentar hinzufügen, aber der Code war zu lang für einen Kommentar.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top