Changeset 1785


Ignore:
Timestamp:
30/11/06 10:47:28 (13 years ago)
Author:
pjkersha
Message:

Added WSSecurityHandler and WSSecurityHandlerChainFactory to allow integration of
wsSecurity.signatureHandler into Twisted framework.

server/SessionMgr/server-config.tac still contains a stub to the real Session Manager code but stub
adapted to return example Attribute Certificate, cookie and proxy certificate in order to test for
problems against the signature handler.

Location:
TI12-security/trunk/python
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/wsSecurity.py

    r1784 r1785  
    829829            print decryptedData 
    830830            #import pdb;pdb.set_trace() 
    831             
    832  
    833  
    834          
    835 if __name__ == "__main__": 
    836     import sys 
    837     txt = None 
    838      
    839     e = EncryptionHandler(certFilePath='../../Junk-cert.pem', 
    840                           priKeyFilePath='../../Junk-key.pem', 
    841                           priKeyPwd=open('../../tmp2').read().strip()) 
    842      
    843     encryptedData = e.encrypt(None) 
    844     print e.decrypt(None, encryptedData) 
    845      
     831 
     832 
     833#_____________________________________________________________________________ 
     834from zope.interface import classProvides, implements, Interface 
     835import twisted.web.http 
     836from twisted.python import log, failure 
     837 
     838from ZSI.twisted.WSresource import DefaultHandlerChain, \ 
     839    DefaultCallbackHandler, CallbackChainInterface, HandlerChainInterface, \ 
     840    DataHandler 
     841     
     842from ZSI import _get_element_nsuri_name, EvaluateException, ParseException 
     843     
     844     
     845class WSSecurityHandlerChainFactory: 
     846    protocol = DefaultHandlerChain 
     847     
     848    @classmethod 
     849    def newInstance(cls): 
     850        return cls.protocol(DefaultCallbackHandler,  
     851                            DataHandler, 
     852                            WSSecurityHandler) 
     853     
     854 
     855class WSSecurityHandler: 
     856    classProvides(HandlerChainInterface) 
     857 
     858    signatureHandler = None 
     859     
     860    @classmethod 
     861    def processRequest(cls, ps, **kw): 
     862        """invokes callback that should return a (request,response) tuple. 
     863        representing the SOAP request and response respectively. 
     864        ps -- ParsedSoap instance representing HTTP Body. 
     865        request -- twisted.web.server.Request 
     866        """ 
     867        print "WSSecurityHandler.processRequest" 
     868        #import pdb;pdb.set_trace() 
     869         
     870        if cls.signatureHandler: 
     871            cls.signatureHandler.verify(ps) 
     872             
     873        return ps 
     874     
     875    @classmethod 
     876    def processResponse(cls, output, **kw): 
     877        print "WSSecurityHandler.processResponse" 
     878        #import pdb;pdb.set_trace() 
     879         
     880        if cls.signatureHandler: 
     881            cls.signatureHandler.sign(output) 
     882             
     883        return output 
     884 
     885 
     886#class WSSecurityHandler: 
     887#    """""" 
     888#    implements(HandlerChainInterface) 
     889#     
     890#    def processRequest(self, ps, **kw): 
     891#        print "WSSecurityAddressHandler.processRequest" 
     892#        import pdb;pdb.set_trace() 
     893#        return ps 
     894#         
     895#    def processResponse(self, sw, **kw): 
     896#        print "WSSecurityAddressHandler.processResponse" 
     897#        import pdb;pdb.set_trace() 
     898#        return sw    
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/SessionMgr/server-config.tac

    r1784 r1785  
    2323from SessionMgr_services_server import SessionMgrService 
    2424from ndg.security.server.SessionMgr import SessionMgr 
     25from ndg.security.common.wsSecurity import WSSecurityHandlerChainFactory, \ 
     26        WSSecurityHandler, SignatureHandler 
    2527 
    2628# Use for stub testing only 
     
    2931 
    3032# Temporary - for testing 
     33 
     34# Use to verify signatures from client - in practice would be different to 
     35# certFilePath 
     36clntCertFilePath = '../../../../../Tests/webSphereTestcert.pem' 
     37 
     38# Private key used to sign messages and also used for SSL connection 
    3139priKeyFilePath = '../../../../../Tests/webSphereTestkey.pem' 
    32 certFilePath = '../../../../../Tests/webSphereTestcert.pem' 
    3340priKeyPwd = '../../../../../Tests/tmp' 
    3441 
     42# Cert file path used for SSL connection 
     43certFilePath = '../../../../../Tests/webSphereTestcert.pem' 
     44 
     45 
     46WSSecurityHandler.signatureHandler = SignatureHandler(\ 
     47                                                            certFilePath=clntCertFilePath, 
     48                                                            priKeyFilePath=priKeyFilePath, 
     49                                                            priKeyPwd=priKeyPwd) 
     50 
     51# Test stub data for connect and reqAuthorisation calls 
     52proxyCert = open('../../../../../Tests/x509up_u500').read().strip() 
     53attCert = open('../../../../../Tests/ac-Rz_Qnn.xml').read().strip() 
     54 
     55 
    3556class SessionMgrServiceSub(SessionMgrService, WSResource): 
     57 
     58    # Add WS-Security handlers 
     59    factory = WSSecurityHandlerChainFactory 
     60         
    3661    def __init__(self): 
    3762        WSResource.__init__(self) 
    3863          
    39         # Initialize Attribute Authority class 
     64        # Initialize Session Manager class - encapsulates inner workings  
     65        # including session management and proxy delegation 
    4066        self.__sm = SessionMgr() 
    4167         
     
    5682            response.set_element_cookie(cookie) 
    5783        else:  
    58             response.set_element_proxyCert('PROXY CERT') 
     84            response.set_element_proxyCert(proxyCert) 
    5985                          
    6086        return request, response 
     
    6894        #import pdb;pdb.set_trace() 
    6995        request, response = SessionMgrService.soap_reqAuthorisation(self, ps) 
    70         response.set_element_attCert('ATTRIBUTE CERTIFICATE') 
     96        response.set_element_attCert(attCert) 
    7197        response.set_element_statusCode('AcessGranted') 
    7298        return request, response 
     
    89115# Try SSL 
    90116from twisted.internet import ssl 
    91 kw = {} 
     117 
     118# Nb. ssl.DefaultOpenSSLContextFactory requires pyOpenSSL 
    92119ctxFactory = ssl.DefaultOpenSSLContextFactory(priKeyFilePath, certFilePath) 
    93120port = internet.SSLServer(portNum, siteFactory, ctxFactory) 
    94121 
     122# Non-SSL 
    95123#port = internet.TCPServer(portNum, siteFactory)#, interface=hostname) 
    96124port.setServiceParent(application) 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/SessionMgrClientTest.py

    r1784 r1785  
    172172         
    173173        self.testCookieConnect() 
    174         resp = self.clnt.reqAuthorisation(\ 
     174        attCert, statusCode, extAttCertList = self.clnt.reqAuthorisation(\ 
    175175                        sessID=self.sessCookie.sessionID,  
    176176                        attAuthorityURI=self.config['aaURI'], 
    177177                        encrSessionMgrURI=self.sessCookie.encrSessionMgrURI) 
    178            
    179         print resp 
     178         
     179        print "Attribute Certificate:\n%s" % attCert   
     180        print "User authorisation: %s" % statusCode 
     181        print "External Attribute Certificate List:\n%s" % extAttCertList 
    180182 
    181183 
     
    185187         
    186188        self.testCookieConnect() 
    187         resp = self.clnt.reqAuthorisation(\ 
     189        attCert, statusCode, extAttCertList = self.clnt.reqAuthorisation(\ 
    188190                        sessID=self.sessCookie.sessionID,  
    189191                        attAuthorityURI=self.config['aaURI'], 
     
    191193                        extAttCertList=['AC1', 'AC2', 'AC3']) 
    192194           
    193         print resp 
     195        print "Attribute Certificate:\n%s" % attCert   
     196        print "User authorisation: %s" % statusCode 
     197        print "External Attribute Certificate List:\n%s" % extAttCertList 
    194198 
    195199 
     
    201205        # Request an attribute certificate from an Attribute Authority  
    202206        # using the proxyCert returned from connect() 
    203         resp = self.clnt.reqAuthorisation(proxyCert=self.proxyCert, 
     207        attCert, statusCode, extAttCertList = self.clnt.reqAuthorisation(\ 
     208                                         proxyCert=self.proxyCert, 
    204209                                         attAuthorityURI=self.config['aaURI']) 
    205                                               
    206         print resp 
     210           
     211        print "Attribute Certificate:\n%s" % attCert   
     212        print "User authorisation: %s" % statusCode 
     213        print "External Attribute Certificate List:\n%s" % extAttCertList 
    207214 
    208215 
Note: See TracChangeset for help on using the changeset viewer.