2012-06-10 61 views
1

我设计我在哪里使用双绞线它与SSL SSL服务器,它需要客户端证书认证,继续该计划,当我验证客户端的SSL证书,则返回true,但我想通过commanname和EMAILADDRESS的客户证书中,这样我可以得到在处理程序类特定的客户端设置,使你能帮助我吗?扭曲的传递证书,SSL处理

from OpenSSL import SSL 
from twisted.internet import ssl, reactor 
from twisted.internet.protocol import Factory, Protocol 
from twisted.web import server, resource, static, twcgi 

class Handler(Protocol): 
    def dataReceived(self, data): 
     self.transport.write(data) 

    def connectionMade(self): 
     self.transport.write('hello world') 

def verifyCallback(connection, x509, errnum, errdepth, ok): 
    global client_username 
    if not ok: 
     return False 
    else:   
     return True 

if __name__ == '__main__': 

    #setting up ssl json server 
    factory = Factory() 
    factory.protocol = Handler 
    myContextFactory = ssl.DefaultOpenSSLContextFactory('server.key', 'server.crt',SSL.TLSv1_METHOD) 
    ctx = myContextFactory.getContext() 
    ctx.load_verify_locations("ca.crt") 
    ctx.set_verify(SSL.VERIFY_PEER | SSL.VERIFY_FAIL_IF_NO_PEER_CERT,verifyCallback) 
    reactor.listenSSL(8080, factory,myContextFactory) 
    reactor.run() 

回答

2

呼叫transport.getPeerCertificateProtocol.dataReceived或另一个协议方法(仅之后已收到一些数据)。