문제

내가 사용하여 imaplib 및 poplib 을 수행하는 이메일을 사용하여 컬렉션 IMAPS 및 POP3S 에 대한 안전한 연결입니다.하지만 무엇이었을 확인할 수 있도,라이브러리를 사용하 캘리포니아의 유효성을 확인하는 인증서를 받았습니다.그것이 사실인가요?는 경우에 그것은,그것을 가능하게 설정 imaplib 또는 poplib 사용하는 캘리포니아?

면 그것은 진실하지 않고 그들은 사용하십시오 캘리포니아,할 수 있는 누군가는 방법을 말해주십시오 imaplib/poplib 니까?

감사합니다.

도움이 되었습니까?

해결책

imaplib.py 의 빠른 점검은 ssl.wrap_socket ()을 사용하여 imap_ssl () 호출을 구현한다는 것을 보여줍니다.wrap_socket () 호출은 3 매개 변수를 제공하며 CA의 유효성을 검사하는 데 필요한 것인 필요한 매개 변수 ca_cert 에 전달되지 않습니다.

imap4_ssl에서 상속받을 수 있으며 open () 메서드를 무시하여 필수 ca_cert 를 전달합니다. "Nofollow"> http://docs.python.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')
.

다른 팁

하나의 생각이 나에게 언급 할 것으로 왔습니다.파이썬 SSL 라이브러리는 OpenSSL top openssl을 구축합니다.서버가 인증서를 제공하도록 요구되며 유효하도록 요구할 경우 인증서 저장소와 관련된 UNIX의 다양한 맛에 문제가 발생합니다.

Mozilla / Firefox가 이미 설치되어있는 시스템에서 작업 할 수 있으면 Cert Store가 올바르게 설정 될 수 있습니다.그러나 그것은 며칠 동안 이것을 올바르게 작동 시키려고 노력하고 있습니다.

이 링크는 "Nofollow"> http://www.madboa.com/geek/openssl/

특히이 링크에주의하십시오 : http://www.madboa.com/괴짜 / OpenSSL / # 확인 시스템

W / OpenSSL 작업을하는 개발자는이 사이트를 북마크해야합니다.그것은 간판쪽에 조금이지만, 모든 단일 항목은 금으로 가치가 있습니다!

IMAP4SSL.Open이 IMAP에서 호출되기 때문에 init 사용자가 열려있는 ()를 호출하지 않기 때문에 위의 해결책이 도움이되지 않습니다. IMAP를 덮어 쓸 수 있습니다. init ...

짧음 : OPEN ()의 매개 변수 만 확장하면 충분하지 않습니다.

INKITHER :

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