Вопрос

Я использую iMaplib и POPLib для выполнения коллекции электронной почты, используя IMAPS и POP3S для безопасного подключения.Но из того, что я смог определить, ни одна библиотека не использует CA для подтверждения действия получения сертификата.Это так верно?Если это так, возможно ли установить iMaplib или Poplib для использования CA?

Если это не правда, и они используют CA, могут кто-то, пожалуйста, скажите мне, как IMAPLIB / POPLIB это делают?

спасибо.

Это было полезно?

Решение

Быстрая проверка imaplib.py показывает, что он использует ssl.wrap_socket () для реализации вызова imap_ssl ().Вызов Call to Wrap_socket () содержит только 3-параметры, и не передает необходимый параметр CA_CERT , что вам нужно, чтобы подтвердить CA.

Вы можете наследовать от IMAP4_SSL, и переопределить метод Open () для передачи в требуемом CA_CERT .Проверьте http://docsssython.org/library/ssl.html для болееинформация.

Возможно, что-то вроде:

class IMAP4_SSL_CA_CHECKER(IMAP4_SSL):
    def open(self, host = '', port = IMAP4_SSL_PORT, ca_certs = None):
        self.host = host
        self.port = port
        self.sock = socket.create_connection((host, port))
        self.sslobj = ssl.wrap_socket(self.sock, self.keyfile, 
                          self.certificate, ca_certs=ca_certs)
        self.file = self.sslobj.makefile('rb')
.

Другие советы

Мне порадовало еще одна мысль, чтобы упомянуть.Библиотека Python SSL построена ATOP OpenSSL.Если вы собираетесь начать требовать сервера, чтобы предоставить сертификаты, и что они будут действительны, вы быстро запустите проблемы на различных ароматах UNIX, связанные с хранилищем сертификата.

Если вы, если вы работаете над системой, которая уже установлена Mozilla / Firefox, Mate Matore, вероятно, будет правильно настроен.Но это не так, ты собираешься бороться за несколько дней, пытаясь сделать это, чтобы правильно работать.

Эта ссылка помогла нам чрезвычайно: http://www.madboa.com/geek/OpenssSL// a>

Особенно обращать внимание на эту ссылку: http://www.madboa.com/Geek / OpenSSL / # Verify-System

Любые разработчики, работающие с OpenSSL, должны добавить закладки этого сайта.Это немного на стороне обработки, но каждая одна запись стоит того вес в золоте!

Потому что imap4ssl.Open вызывается из IMAP. <Сильные> init Раствор выше не помогает, потому что пользователь не вызывает открыть (). Вы можете перезаписать IMAP. init to ...

Короткое: расширение только параметр для открытия () недостаточно.

Я использовал впрыск:

def IMAP4SSL_open(self, host = '', port = imaplib.IMAP4_SSL_PORT):
    ... own implementation ...
    wrap_socket( ... cert_reqs=ssl.CERT_REQUIRED ... )
imaplib.IMAP4_SSL.__dict__['open']=IMAP4SSL_open
.

Я в настоящее время строю что-то в этом направлении.

Следующий код добавляет starttls для IMAP.Просто позвоните server.starttls() после подключения.Обязательно подключитесь к нормальному порту IMAP.

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: я хотел добавить это как комментарий, но код должен был длительно для комментариев.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top