Changeset 1784


Ignore:
Timestamp:
29/11/06 17:30:23 (13 years ago)
Author:
pjkersha
Message:

ndg.security.server/setup.py: added 4Suite url to dependency links
server/SessionMgr/server-config.tac: minor reformatting
test/SessionMgrClientTest.py, common/SessionMgr/init.py: added WS-Security Signature handler code.
common/wsSecurity.py: WS-Security module as used in WebSphere? testing. will need refactoring to
use ZSI pyclass code generated from WS-Security schema.

Location:
TI12-security/trunk/python
Files:
4 edited
1 copied

Legend:

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

    r1783 r1784  
    2424 
    2525from ndg.security.common.SessionCookie import SessionCookie 
     26from ndg.security.common.wsSecurity import SignatureHandler 
    2627from ndg.security.common.X509 import * 
    2728from ndg.security.common.AttCert import AttCertParse 
     
    4344                 clntCertFilePath=None, 
    4445                 clntPriKeyFilePath=None, 
     46                 clntPriKeyPwd=None, 
    4547                 tracefile=None): 
    4648        """ 
    4749        uri:                     URI for Session Manager WS.  Setting it  
    4850                                 will set the Service Proxy 
    49         smCertFilePath:     
    50                                  Public key of Session Manager used to encrypt 
    51                                  the outgoing message if required - set as a 
    52                                  path on the local file system or as a URI 
     51        smCertFilePath:          Public key of Session Manager.  This is  
     52                                 needed to verify signed messages back from 
     53                                 the Session Manager 
    5354        clntCertFilePath:        X.509 cert for client.  This is passed to the 
    5455                                 Session Manager so that it can encrypt 
    5556                                 responses.  WARNING: if not set, responses 
    5657                                 are returned as clear text 
    57         clntPriKeyFilePath:      Private key of client.  If clntCertFilePath 
    58                                  is set, the private key is needed to decrypt  
    59                                  the response from the Session Manager 
     58        clntPriKeyFilePath:      Private key of client.  This is passed to  
     59                                 the signature handler to sign requests to  
     60                                 the Session Manager. 
     61        clntPriKeyPwd:           Password for the client private key file. 
     62                                 Default to None if the file is not password 
     63                                 protected. 
    6064        tracefile:               set to file object such as sys.stderr to  
    6165                                 give extra WS debug information""" 
     
    6367        self.__srv = None 
    6468        self.__uri = None 
    65         self.__smCertFilePath = None 
    6669        self.__smCertFilePath = None 
    6770        self.__clntCertFilePath = None 
    6871        self.__clntCert = None 
    6972        self.__clntPriKeyFilePath = None 
     73        self.__clntPriKeyPwd = None 
    7074         
    7175        self.__smCertTempFile = None 
     
    8286             
    8387        if clntCertFilePath: 
    84             if clntPriKeyFilePath is None: 
    85                 raise SessionMgrClientError, \ 
    86                     "A Client private key file is required as well a " + \ 
    87                     "public key" 
    88                      
    8988            self.__setClntCertFilePath(clntCertFilePath) 
    90  
    91             
     89           
    9290        self.__tracefile = tracefile 
    9391 
    9492          
    95         # Instantiate Session Manager WS proxy 
    96         if self.__uri: 
     93        # Instantiate Session Manager WS ZSI client 
     94        if self.__uri and smCertFilePath and clntPriKeyFilePath: 
    9795            self.initService() 
    9896         
     
    153151        if not isinstance(clntPriKeyFilePath, basestring): 
    154152            raise SessionMgrClientError, \ 
    155                         "Client public key file path must be a valid string" 
     153                        "Client private key file path must be a valid string" 
    156154         
    157155        self.__clntPriKeyFilePath = clntPriKeyFilePath 
     
    159157    clntPriKeyFilePath = property(fset=__setClntPriKeyFilePath, 
    160158                                  doc="File path for client private key") 
     159 
     160  
     161    #_________________________________________________________________________ 
     162    def __setClntPriKeyPwd(self, clntPriKeyPwd): 
     163         
     164        if not isinstance(clntPriKeyPwd, basestring): 
     165            raise SessionMgrClientError, \ 
     166                        "Client private key password must be a valid string" 
     167         
     168        self.__clntPriKeyPwd = clntPriKeyPwd 
     169         
     170    clntPriKeyPwd = property(fset=__setClntPriKeyPwd, 
     171                         doc="Password protecting client private key file") 
    161172 
    162173 
     
    190201    #_________________________________________________________________________ 
    191202    def initService(self, uri=None): 
    192         """Set the WS proxy for the Session Manager""" 
     203        """Set the WS client for the Session Manager""" 
    193204        if uri: 
    194205            self.__setURI(uri) 
    195206 
     207        # WS-Security Signature handler object is passed to binding 
     208        signatureHandler = SignatureHandler(\ 
     209                                    certFilePath=self.__smCertFilePath, 
     210                                    priKeyFilePath=self.__clntPriKeyFilePath, 
     211                                    priKeyPwd=self.__clntPriKeyPwd) 
     212 
    196213        try: 
    197214            locator = SessionMgrServiceLocator() 
    198             self.__srv = locator.getSessionMgr(self.__uri,  
     215            self.__srv = locator.getSessionMgr(self.__uri, 
     216                                               sig_handler=signatureHandler, 
    199217                                               tracefile=self.__tracefile) 
    200218        except HTTPResponse, e: 
    201219            raise SessionMgrClientError, \ 
    202                 "Error initialising WSDL Service for \"%s\": %s %s" % \ 
     220                "Error initialising Service for \"%s\": %s %s" % \ 
    203221                (self.__uri, e.status, e.reason) 
    204222             
    205223        except Exception, e: 
    206224            raise SessionMgrClientError, \ 
    207                 "Initialising WSDL Service for \"%s\": %s" % \ 
    208                  (self.__uri, str(e)) 
     225                "Initialising Service for \"%s\": %s" % (self.__uri, str(e)) 
    209226 
    210227                                     
     
    253270                pPhraseFilePath=None, 
    254271                getCookie=True, 
    255                 createServerSess=False, 
    256                 clntPriKeyPwd=None): 
     272                createServerSess=False): 
    257273        """Request a new user session from the Session Manager 
    258274         
     
    292308        self.__getSessionMgrCert() 
    293309 
    294  
    295310        # Make connection 
    296311        try:  
     
    304319            elif proxyCert: 
    305320                return proxyCert 
    306                         
     321         
    307322            else: 
    308323               raise SessionMgrClientError, \ 
    309                "Neither \"_sessCookie\" or \"_proxyCert\" found in response" 
     324               "Neither \"cookie\" or \"proxyCert\" returned in response" 
    310325                
    311326        except Exception, e: 
     
    378393                         rtnExtAttCertList=False, 
    379394                         extAttCertList=[], 
    380                          extTrustedHostList=[], 
    381                          clntPriKeyPwd=None):     
     395                         extTrustedHostList=[]):     
    382396        """Request authorisation from NDG Session Manager Web Service. 
    383397         
     
    412426                               get Attribute Certificates for making a mapped 
    413427                               AC. 
    414         clntPriKeyPwd:         pass-phrase if any for the client's private 
    415                                key used to decrypt response from 
    416                                Session Manager. 
    417428        """ 
    418429         
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/SessionMgr/server-config.tac

    r1783 r1784  
    2828from datetime import datetime, timedelta 
    2929 
     30# Temporary - for testing 
     31priKeyFilePath = '../../../../../Tests/webSphereTestkey.pem' 
     32certFilePath = '../../../../../Tests/webSphereTestcert.pem' 
     33priKeyPwd = '../../../../../Tests/tmp' 
     34 
    3035class SessionMgrServiceSub(SessionMgrService, WSResource): 
    31      def __init__(self): 
    32          WSResource.__init__(self) 
     36    def __init__(self): 
     37        WSResource.__init__(self) 
    3338          
    34          # Initialize Attribute Authority class 
    35          self.__sm = SessionMgr() 
     39        # Initialize Attribute Authority class 
     40        self.__sm = SessionMgr() 
     41         
     42    def soap_addUser(self, ps, **kw): 
     43        #import pdb;pdb.set_trace() 
     44        request, response = SessionMgrService.soap_addUser(self, ps) 
     45        return request, response 
    3646 
    37      def soap_addUser(self, ps, **kw): 
    38          #import pdb;pdb.set_trace() 
    39          request, response = SessionMgrService.soap_addUser(self, ps) 
    40          return request, response 
     47    def soap_connect(self, ps, **kw): 
     48        #import pdb;pdb.set_trace() 
     49        request, response = SessionMgrService.soap_connect(self, ps) 
    4150 
    42      def soap_connect(self, ps, **kw): 
    43          #import pdb;pdb.set_trace() 
    44          request, response = SessionMgrService.soap_connect(self, ps) 
     51        if request.get_element_getCookie(): 
     52            dtExpiry = datetime.utcnow() + timedelta(seconds=60*60) 
     53            cookie = SessionCookie(ndgID1='9'*64,  
     54                                   ndgID2='0'*64, 
     55                                   dtExpiry=dtExpiry) 
     56            response.set_element_cookie(cookie) 
     57        else:  
     58            response.set_element_proxyCert('PROXY CERT') 
     59                          
     60        return request, response 
    4561 
    46          if request.get_element_getCookie(): 
    47              dtExpiry = datetime.utcnow() + timedelta(seconds=60*60) 
    48              cookie = SessionCookie(ndgID1='9'*64,  
    49                                     ndgID2='0'*64, 
    50                                     dtExpiry=dtExpiry) 
    51              response.set_element_cookie(cookie) 
    52          else:  
    53              response.set_element_proxyCert('PROXY CERT') 
    54                           
    55          return request, response 
     62    def soap_disconnect(self, ps, **kw): 
     63        #import pdb;pdb.set_trace() 
     64        request, response = SessionMgrService.soap_disconnect(self, ps) 
     65        return request, response 
    5666 
    57      def soap_disconnect(self, ps, **kw): 
    58          #import pdb;pdb.set_trace() 
    59          request, response = SessionMgrService.soap_disconnect(self, ps) 
    60          return request, response 
     67    def soap_reqAuthorisation(self, ps, **kw): 
     68        #import pdb;pdb.set_trace() 
     69        request, response = SessionMgrService.soap_reqAuthorisation(self, ps) 
     70        response.set_element_attCert('ATTRIBUTE CERTIFICATE') 
     71        response.set_element_statusCode('AcessGranted') 
     72        return request, response 
    6173 
    62      def soap_reqAuthorisation(self, ps, **kw): 
    63          #import pdb;pdb.set_trace() 
    64          request, response = SessionMgrService.soap_reqAuthorisation(self, ps) 
    65          response.set_element_attCert('ATTRIBUTE CERTIFICATE') 
    66          response.set_element_statusCode('AcessGranted') 
    67          return request, response 
     74    def soap_getX509Cert(self, ps, **kw): 
     75        #import pdb;pdb.set_trace() 
     76        request, response = SessionMgrService.soap_getX509Cert(self, ps) 
     77        response.set_element_x509Cert('X.509 Cert.') 
     78        return request, response 
    6879 
    69      def soap_getX509Cert(self, ps, **kw): 
    70          #import pdb;pdb.set_trace() 
    71          request, response = SessionMgrService.soap_getX509Cert(self, ps) 
    72          response.set_element_x509Cert('X.509 Cert.') 
    73          return request, response 
    74  
    75 portNum = 5000 
     80# Use default https port 
     81portNum = 5700 
    7682hostname = socket.gethostname() 
    7783 
     
    8490from twisted.internet import ssl 
    8591kw = {} 
    86 priKeyFilePath = '../../../../../Tests/Junk2-key.pem' 
    87 certFilePath = '../../../../../Tests/Junk2-cert.pem' 
    8892ctxFactory = ssl.DefaultOpenSSLContextFactory(priKeyFilePath, certFilePath) 
    8993port = internet.SSLServer(portNum, siteFactory, ctxFactory) 
  • TI12-security/trunk/python/ndg.security.server/setup.py

    r1779 r1784  
    3737#    'm2crypto', # build fails - find way to make it link with /usr/local/NDG openssl installation 
    3838    'ZSI', 
    39 #    '4Suite', don't need to include it as ZSI egg will get this instead 
     39#    '4Suite',  
    4040#    'Twisted', 
    4141#    'TwistedWeb', 
     
    5151# instead give the explicit URL.  This may cause problems later! 
    5252_pkgDependencyLinks = [ 
     53    "ftp://ftp.4suite.org/pub/4Suite/4Suite-XML-1.0.tar.gz", 
    5354    "http://www.zope.org/Products/ZopeInterface/3.0.1final/ZopeInterface-3.0.1.tgz", 
    5455    "http://prdownloads.sourceforge.net/pyxml/PyXML-0.8.4.tar.gz?use_mirror=kent", 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/SessionMgrClientTest.py

    r1783 r1784  
    3232 
    3333        testConfig = {} 
    34         testConfig['smURI'] = 'https://localhost:5000/SessionManager' 
    35         testConfig['aaURI'] = 'https://localhost:5700/AttributeAuthority' 
     34        testConfig['smURI'] = 'https://gabriel.bnsc.rl.ac.uk/SessionManager'#'https://localhost:5700/SessionManager' 
     35        testConfig['aaURI'] = 'https://localhost:5000/AttributeAuthority' 
    3636 
    3737         
     
    4747        # If no public key is set, it will be retrieved using the 
    4848        # getCert WS method 
    49         testConfig['smCertFilePath'] = None 
    50  
    51         testConfig['clntPriKeyPwd'] = None#open("./tmp3").read().strip() 
    52  
    53         testConfig['clntCertFilePath'] = None#"./Junk-cert.pem" 
    54         testConfig['clntPriKeyFilePath'] = None#"./Junk-key.pem" 
     49        testConfig['smCertFilePath'] = '../../../../Tests/webSphereTestcert.pem' 
     50 
     51        testConfig['clntPriKeyPwd'] = open("./tmp3").read().strip() 
     52 
     53        testConfig['clntCertFilePath'] = None 
     54        testConfig['clntPriKeyFilePath'] = '../../../../Tests/webSphereTestkey.pem' 
    5555         
    5656         
     
    9696        #self.config = glueConfig 
    9797 
    98          
    99         self.__clntPriKeyPwd = self.config['clntPriKeyPwd'] 
    10098        tracefile = sys.stderr 
    10199         
     
    106104                        clntCertFilePath=self.config['clntCertFilePath'], 
    107105                        clntPriKeyFilePath=self.config['clntPriKeyFilePath'], 
     106                        clntPriKeyPwd=self.config['clntPriKeyPwd'], 
    108107                        tracefile=tracefile)  
    109108         
     
    118117        # explicitly as a string use the 'pPhrase' keyword instead 
    119118        self.clnt.addUser(self.config['newUserName'],  
    120                           pPhrase=self.config['newUsernamePPhrase'], 
    121                           clntPriKeyPwd=self.__clntPriKeyPwd) 
     119                          pPhrase=self.config['newUsernamePPhrase']) 
    122120        print "Added user '%s'" % self.config['newUserName'] 
    123121         
     
    126124        """testCookieConnect: Connect as if acting as a browser client -  
    127125        a cookie is returned""" 
    128          
     126        #import pdb;pdb.set_trace() 
    129127        # Note the pass-phrase is read from the file tmp.  To pass 
    130128        # explicitly as a string use the 'pPhrase' keyword instead 
    131129        sSessCookie = self.clnt.connect(self.config['userName'],  
    132                                     pPhrase=self.config['userNamePPhrase'], 
    133                                     clntPriKeyPwd=self.__clntPriKeyPwd) 
     130                                    pPhrase=self.config['userNamePPhrase']) 
    134131 
    135132        self.sessCookie = SessionCookie(sSessCookie) 
     
    145142                                      pPhrase=self.config['userNamePPhrase'], 
    146143                                      createServerSess=True, 
    147                                       getCookie=False, 
    148                                       clntPriKeyPwd=self.__clntPriKeyPwd) 
     144                                      getCookie=False) 
    149145        print "User '%s' connected to Session Manager:\n%s" % \ 
    150146            (self.config['userName'], self.proxyCert) 
     
    172168 
    173169    def testCookieReqAuthorisation(self): 
     170        """testCookieReqAuthorisation: make an authorisation request using 
     171        a cookie as authentication credential""" 
     172         
     173        self.testCookieConnect() 
     174        resp = self.clnt.reqAuthorisation(\ 
     175                        sessID=self.sessCookie.sessionID,  
     176                        attAuthorityURI=self.config['aaURI'], 
     177                        encrSessionMgrURI=self.sessCookie.encrSessionMgrURI) 
     178           
     179        print resp 
     180 
     181 
     182    def testCookieReqAuthorisationWithExtAttCertList(self): 
    174183        """testCookieReqAuthorisation: make an authorisation request using 
    175184        a cookie as authentication credential""" 
     
    180189                        attAuthorityURI=self.config['aaURI'], 
    181190                        encrSessionMgrURI=self.sessCookie.encrSessionMgrURI, 
    182                         clntPriKeyPwd=self.__clntPriKeyPwd) 
    183            
    184         print resp 
    185  
    186  
    187     def testCookieReqAuthorisationWithExtAttCertList(self): 
    188         """testCookieReqAuthorisation: make an authorisation request using 
    189         a cookie as authentication credential""" 
    190          
    191         self.testCookieConnect() 
    192         resp = self.clnt.reqAuthorisation(\ 
    193                         sessID=self.sessCookie.sessionID,  
    194                         attAuthorityURI=self.config['aaURI'], 
    195                         encrSessionMgrURI=self.sessCookie.encrSessionMgrURI, 
    196                         extAttCertList=['AC1', 'AC2', 'AC3'], 
    197                         clntPriKeyPwd=self.__clntPriKeyPwd) 
     191                        extAttCertList=['AC1', 'AC2', 'AC3']) 
    198192           
    199193        print resp 
     
    208202        # using the proxyCert returned from connect() 
    209203        resp = self.clnt.reqAuthorisation(proxyCert=self.proxyCert, 
    210                                          attAuthorityURI=self.config['aaURI'], 
    211                                          clntPriKeyPwd=self.__clntPriKeyPwd) 
     204                                         attAuthorityURI=self.config['aaURI']) 
    212205                                              
    213206        print resp 
Note: See TracChangeset for help on using the changeset viewer.