에 대한 인증 기관 imaplib 및 poplib python
문제
내가 사용하여 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:고 싶어로이 추가 코멘트,하지만 코드를 위해 긴 있습니다.