Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将TLS与asyncore一起使用?_Python_Ssl - Fatal编程技术网

Python 如何将TLS与asyncore一起使用?

Python 如何将TLS与asyncore一起使用?,python,ssl,Python,Ssl,基于asyncore的XMPP客户端打开到XMPP服务器的正常TCP连接。服务器指示它需要加密连接。客户机现在需要启动TLS握手,以便对后续请求进行加密 与asyncore集成,但是示例代码是针对服务器(?)的,我不明白它在做什么 我使用的是Python 2.5。我怎样才能让TLS魔法发挥作用 以下是最终对我有用的东西: from tlslite.api import * def handshakeTls(self): """ Encrypt the socket using

基于asyncore的XMPP客户端打开到XMPP服务器的正常TCP连接。服务器指示它需要加密连接。客户机现在需要启动TLS握手,以便对后续请求进行加密

与asyncore集成,但是示例代码是针对服务器(?)的,我不明白它在做什么

我使用的是Python 2.5。我怎样才能让TLS魔法发挥作用


以下是最终对我有用的东西:

from tlslite.api import *

def handshakeTls(self):
    """
    Encrypt the socket using the tlslite module
    """
    self.logger.info("activating TLS encrpytion")
    self.socket = TLSConnection(self.socket)
    self.socket.handshakeClientCert()

我遵循了我认为是tlslite文档让asyncore客户端工作的所有步骤——我实际上无法让它工作,因为我手头唯一可以为此目的调整的asyncore客户端是Python文档中的示例,这是一个HTTP 1.0客户端,我相信正因为如此,我正试图以一种非常不成熟的方式建立HTTPS连接。我没有asyncore XMPP客户端,也没有任何请求TLS的XMPP服务器来接近您的情况。尽管如此,我还是决定分享我的工作成果,因为(尽管可能缺少一些步骤)它确实比您以前拥有的要好一点——我想我在
\uuuu init\uuuuuu
中展示了所有需要的步骤。顺便说一句,我从tlslite/test目录复制了pem文件

import asyncore, socket
from tlslite.api import *

s = open("./clientX509Cert.pem").read()
x509 = X509()
x509.parse(s)
certChain = X509CertChain([x509])

s = open("./clientX509Key.pem").read()
privateKey = parsePEMKey(s, private=True)


class http_client(TLSAsyncDispatcherMixIn, asyncore.dispatcher):
    ac_in_buffer_size = 16384

    def __init__(self, host, path):
        asyncore.dispatcher.__init__(self)
        self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
        self.connect( (host, 80) )

        TLSAsyncDispatcherMixIn.__init__(self, self.socket)
        self.tlsConnection.ignoreAbruptClose = True
        handshaker = self.tlsConnection.handshakeClientCert(
            certChain=certChain,
            privateKey=privateKey,
            async=True)
        self.setHandshakeOp(handshaker)

        self.buffer = 'GET %s HTTP/1.0\r\n\r\n' % path

    def handle_connect(self):
        pass

    def handle_close(self):
        self.close()

    def handle_read(self):
        print self.recv(8192)

    def writable(self):
        return (len(self.buffer) > 0)

    def handle_write(self):
        sent = self.send(self.buffer)
        self.buffer = self.buffer[sent:]

c = http_client('www.readyhosting.com', '/')

asyncore.loop()
这是Python文档中asyncore示例http客户机的混合,加上我从tlslite文档中收集到的内容,并且能够从它们的源代码进行反向工程。希望这(即使不完整/不起作用)至少能促进你的探索


P>个人,在你的鞋子里,我会考虑从AsCype切换到-AySype是旧的和生锈的,扭曲已经集成了很多多汁的、有用的位(我给的URL是在文档中的一个已经集成了TLS和XMPP的……)。我一直在用它构建大量的xmpp机器人和组件,这是一个梦想。

谢谢,这非常有用。它鼓励我更详细地研究TLSAsyncDispatcherMixIn,在那里我最终了解到,这对我来说是一个骗局,我可以用两条简单的线让TLS魔法发挥作用。关于asyncore“老掉牙”的评论,你能详细说明或提供链接吗?网上有很多讨论,例如koichitamura.blogspot.com/2008/04/。多年来,没有人对asyncore进行过实质性的改进,而twisted是一块正在积极开发和完善的宝石。顺便说一句,你能编辑你的问题,在问题的末尾加上“2行简单的句子”吗?这样其他人将来可以从中受益吗?谢谢