Archives

  • 网络安全通讯(5)—-支持客户端验证的python web server

    前面我们说道很多的场景是需要客户端验证(Client Certificate)的,而python的web server如何支持呢?大多数的python web server都是符合WSGI标准的,也就是他们提供WSGI标准支持的功能,也就是他们几乎都不支持WSGI不支持的功能。很遗憾,客户端验证不在此列。换句话说,Cherrypy,webpy等常用的python web server都无法支持客户端验证。 我终于找到了Twisted(他怎么一下从2.5就蹦到了8.0.1)的web模块可以作为一个单独的web server。而这个web模块是包装的很底层的,使用pyopenssl,并且不是WSGI的一个实现。也就是说,他很可能是支持客户端验证的。经过一番google,发现了支持的办法。如下:首先我们看一下如何让Twisted支持HTTPS,他需要执行reactor.listenSSL方法, class Hello(Resource) :    isLeaf = True    def render(self, request) :        return ‘Hello, SSL’root = server.Site(Hello())ctxFactory = ssl.DefaultOpenSSLContextFactory(    ‘/path/to/server.key’,    ‘/path/to/server.crt’    )reactor.listenSSL(443, root, contextFactory = ctxFactory)reactor.run() 这是最基本的支持HTTPS的方法,我们看,他需要一个contextFactory,深入到Twisted里面发现这个contextFactory是SSL进行设置。我们想要他支持客户端验证,就要从这里下手了。DefaultOpenSSLContextFactory的cacheContext方法是对context进行的操作。我们重写这个方法。 class SSLClientCertificateFactory(ssl.DefaultOpenSSLContextFactory) :     def __init__(self, privateKeyFileName, certificateFileName, sslmethod=SSL.SSLv23_METHOD) :        ssl.DefaultOpenSSLContextFactory.__init__(self, privateKeyFileName, certificateFileName, sslmethod)     def _verify(self, connection, x509, errnum, errdepth, [...]

    Apr 2nd, 2008 | Filed under python, 安全
Posts Tagged ‘twisted’