首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >imaplib和poplib python的证书颁发机构

imaplib和poplib python的证书颁发机构
EN

Stack Overflow用户
提问于 2012-03-15 10:09:19
回答 4查看 1.8K关注 0票数 2

我正在使用imaplib和poplib来执行电子邮件收集,使用IMAPS和POP3S来实现安全连接。但根据我所能确定的,这两个库都没有使用CA来确认接收到的证书的有效性。这是真的吗?如果是,是否可以将imaplib或poplib设置为使用CA?

如果这不是真的,他们确实使用了CA,有人能告诉我imaplib/poplib是如何做到的吗?

谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-03-16 01:24:37

快速检查一下imaplib.py,就会发现它使用ssl.wrap_socket()来实现IMAP_SSL()调用。对wrap_socket()的调用只提供了3个参数,并且没有传递验证CA所需的参数ca_cert

您可以从IMAP4_SSL继承,并覆盖open()方法以传入所需的ca_cert。有关更多信息,请查看http://docs.python.org/library/ssl.html

可能是这样的:

代码语言:javascript
复制
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')
票数 2
EN

Stack Overflow用户

发布于 2012-03-22 23:05:46

我又想到了一个要提的想法。python ssl库构建在OpenSSL之上。如果您打算开始要求服务器提供证书并且这些证书是有效的,那么您很快就会遇到与证书存储相关的各种Unix版本的问题。

如果您碰巧在已经安装了Mozilla/Firefox的系统上工作,证书存储很可能设置正确。但事实并非如此,你需要花几天的时间才能让它正常工作。

这个链接给了我们很大的帮助:http://www.madboa.com/geek/openssl/

特别要注意这个链接:http://www.madboa.com/geek/openssl/#verify-system

任何使用openssl的开发人员都应该将该站点加入书签。这有点简洁明了,但每一篇文章都是值得的!

票数 1
EN

Stack Overflow用户

发布于 2012-04-25 18:02:43

因为IMAP4SSL.open是从IMAP.init调用的,所以上面的解决方案没有帮助,因为用户没有调用IMAP4SSL.open()。您可以覆盖IMAP。初始化到...

简而言之:只扩展open()的参数是不够的。

我使用了注入:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9713055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档