2014-02-03 1 views
1

Я пытаюсь использовать функцию imaplib.IMAP4_SSL, но я застрял с этой ошибкой:imaplib питона с сертификатом SSL

[Errno 336265225] _ssl.c: 356: ошибка: 140B0009: SSL подпрограмм: SSL_CTX_use_PrivateKey_file: PEM Lib

try: 
     mail = imaplib.IMAP4_SSL(host='imap.gmail.com', port="993", certfile="certIMAP.pem") 
except Exception as e: 
     print e 
     sys.exit() 

сертификат был загружен с:

echo | openssl s_client -connect imap.gmail.com:993 2>/dev/null | openssl x509 > certIMAP.pem 

Разрешение на файл в порядке. Если я использую параметр keyfile, они запрашивают у меня сертификат, а затем получают ту же ошибку. Я не мог найти пример для этой функции со спецификацией сертификата. Спасибо.

ответ

2

Хотя документация не очевидна, я бы предположил, что параметры certfile и keyfile не используются для проверки сертификата сервера (как вы его используете), а ключевой файл здесь не имеет смысла), а являются дополнительным сертификатом для клиента и его секретного ключа, который может потребоваться определенному серверу для идентификации клиента (например, вместо этого или дополнительно к паролю).

Для проверки сервера у вас обычно есть что-то, называемое CA-файлом или CA-контуром (CA = агентство сертификации), и здесь вам не нужен секретный ключ. Кажется, нет никакого очевидного способа получить сертификаты CA здесь, но Certificate Authority for imaplib and poplib python может помочь вам в этом.

+0

Спасибо! Я удалил из связанного кода параметры идентификации локальной стороны, и я импортировал их в свою библиотеку ssl e socket. Я также добавил в ssl.wrap_socket параметр cert_reqs = ssl.CERT_REQUIRED. Параметр cert - это список ca-cert.crt. Это зависит от ОС. – asdf