Changeset 2076


Ignore:
Timestamp:
30/01/07 08:57:43 (13 years ago)
Author:
pjkersha
Message:

python/ndg.security.server/ndg/security/server/SessionMgr/server-config.tac:

  • Added code to soap_getAttCert stub
  • updated WSSecurityHandler.signatureHandler initialisation with new keywords.

python/ndg.security.server/ndg/security/server/SessionMgr/init.py:

  • renamed redirectAuthorisationReq -> redirectAttCertReq
  • createUserSession now takes proxy cert, private key and user cert as inputs

python/www/html/sessionMgr.wsdl,
python/ndg.security.server/ndg/security/server/SessionMgr/SessionMgr_services_server.py,
python/ndg.security.common/ndg/security/common/SessionMgr/SessionMgr_services.py and
python/ndg.security.common/ndg/security/common/SessionMgr/SessionMgr_services_types.py:
Modified getAttCert and disconnect operations.

python/ndg.security.test/ndg/security/test/SessionMgr/SessionMgrClientTest.py:

  • updated call to SessionMgrClient? to use new SignatureHandler? keywords.
  • experimenting with disconnect calls - signature doesn't verify correctly at server side.
  • updated call to getAttcert in test6CookieGetAttCert

python/ndg.security.test/ndg/security/test/SessionMgr/sessionMgrClientTest.cfg: updated
AA URIs.

python/ndg.security.common/ndg/security/common/AttAuthority/init.py:
added getSignatureHandler property access method.

python/ndg.security.common/ndg/security/common/XMLSec.py: include more info about error
for when RSA pub key verify fails.

python/ndg.security.common/ndg/security/common/wsSecurity.py:

  • added InvalidSignature? type exception
  • include more info about error for when RSA pub key verify fails.

python/ndg.security.common/ndg/security/common/SessionMgr/init.py:

  • added getSignatureHandler property access method.
  • fix to disconnect keywords input check

python/ndg.security.common/ndg/security/common/CredWallet.py: major refactoring for
prospective beta release of NDG security -

  • attCertRefreshElapse - new attribute used by getAttCert to determine whether to replace

an existing AC in the cache with a fresh one. If the existing one has less than
attCertRefreshElapse time in seconds left before expiry then replace it

  • added epydoc formatting
  • explicit proxy cert, private key and user cert inputs to init. These are also

declared as properties with access methods.

  • proxy cert / private key used in SOAP message signatures.
  • use NullCredRepos? class as default Credential Repository
  • refactoring of WS calls to AA in line with new AttAuthorityClient? interface.
Location:
TI12-security/trunk/python
Files:
13 edited

Legend:

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

    r2072 r2076  
    8383 
    8484    #_________________________________________________________________________ 
    85     def __getSignatureHandler(self, uri): 
     85    def __getSignatureHandler(self): 
    8686        "Get SignatureHandler object property method" 
    8787        return self.__signatureHandler 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/CredWallet.py

    r2063 r2076  
    33NERC Data Grid Project 
    44 
    5 P J Kershaw 30/11/05 
    6  
    7 Copyright (C) 2006 CCLRC & NERC 
    8  
    9 This software may be distributed under the terms of the Q Public License, 
    10 version 1.0 or later. 
     5@author P J Kershaw 30/11/05 
     6 
     7@copyright (C) 2007 CCLRC & NERC 
     8 
     9@license This software may be distributed under the terms of the Q Public  
     10License, version 1.0 or later. 
    1111""" 
    1212 
     
    4848 
    4949# Authentication X.509 Certificate 
    50 from X509 import * 
     50from ndg.security.common.X509 import * 
     51from M2Crypto import X509, BIO, RSA 
    5152 
    5253# Authorisation - attribute certificate  
    53 from AttCert import * 
     54from ndg.security.common.AttCert import * 
    5455 
    5556 
     
    103104 
    104105    trustedHostInfo = property(fget=__getTrustedHostInfo,  
    105                                doc="WSDL and roles details for trusted hosts") 
     106                               doc="URI and roles details for trusted hosts") 
    106107     
    107108     
     
    152153 
    153154    def __init__(self, 
    154                  proxyCertTxt, 
     155                 proxyCert, 
     156                 proxyPriKey, 
     157                 userCert, 
    155158                 caCertFilePath=None, 
    156159                 clntCertFilePath=None, 
     
    159162                 credRepos=None, 
    160163                 mapFromTrustedHosts=False, 
    161                  rtnExtAttCertList=True): 
     164                 rtnExtAttCertList=True, 
     165                 attCertRefreshElapse=7200): 
    162166        """Create store of user credentials for their current session 
    163167 
    164         proxy certificate:      users proxy certificate as string text 
    165         caCertFilePath:       Certificate Authority's certificate - used in 
    166                                 validation of signed Attribute Certificates. 
    167                                 If not set here, it must be input in call 
    168                                 to getAttCert. 
     168        @type proxyCert: string / M2Crypto.X509.X509 / 
     169        ndg.security.common.X509.X509Cert 
     170        @param proxyCert: X.509 proxy certificate for user 
     171         
     172        @type proxyPriKey: string / M2Crypto.RSA.RSA  
     173        @param proxyPriKey: private key for proxy 
     174         
     175        @type userCert: string / ndg.security.common.X509.X509Cert 
     176        @param userCert: X.509 cert for issuer of proxy 
     177         
     178        @type caCertFilePath: string 
     179        @keyword caCertFilePath: Certificate Authority's certificate - used in 
     180        validation of signed Attribute Certificates.  If not set here, it must 
     181        be input in call to getAttCert. 
     182         
    169183        clntCertFilePath:     Public key certificate for this client.  
    170184                                Setting this enables return message from AA  
     
    173187                                from AA. 
    174188        clntPriKeyPwd:          Password protecting the client private key. 
    175         credRepos:              Credential Repository instance 
    176         mapFromTrustedHosts:    sets behaviour for getAttCert().  If 
    177                                 set True and authorisation fails with the 
    178                                 given Attribute Authority, attempt to get 
    179                                 authorisation using Attribute Certificates 
    180                                 issued by other trusted AAs 
    181         rtnExtAttCertList:     behaviour for getAttCert().  If True, 
    182                                 and authorisation fails with the given 
    183                                 Attribute Authority, return a list of 
    184                                 Attribute Certificates from other trusted AAs 
    185                                 which could be used to obtain a mapped 
    186                                 Attribute Certificate on a subsequent 
    187                                 authorisation attempt""" 
    188  
    189  
    190         # Makes implicit call to __setProxyCert - Checks the proxy certificate 
    191         # and make an NDG.X509Cert instance 
    192         self.proxyCertTxt = proxyCertTxt 
     189         
     190        @type credRepos: instance of CredRepos derived class 
     191        @keyword credRepos: Credential Repository instance.  If not set,  
     192        defaults to NullCredRepos type - see class below... 
     193         
     194        @type mapFromTrustedHosts: bool 
     195        @keyword mapFromTrustedHosts sets behaviour for getAttCert().  If 
     196        set True and authorisation fails with the given Attribute Authority,  
     197        attempt to get authorisation using Attribute Certificates issued by  
     198        other trusted AAs. 
     199         
     200        @type rtnExtAttCertList: bool 
     201        @keyword rtnExtAttCertList: behaviour for getAttCert().  If True, and  
     202        authorisation fails with the given Attribute Authority, return a list  
     203        of Attribute Certificates from other trusted AAs which could be used  
     204        to obtain a mapped Attribute Certificate on a subsequent authorisation 
     205        attempt 
     206         
     207        @type attCertRefreshElapse: float / int 
     208        @keyword attCertRefreshElapse: used by getAttCert to determine  
     209        whether to replace an existing AC in the cache with a fresh one.  If  
     210        the existing one has less than attCertRefreshElapse time in seconds 
     211        left before expiry then replace it.""" 
     212 
     213 
     214        self.attCertRefreshElapse = attCertRefreshElapse 
     215         
     216        self.__setProxyCert(proxyCert) 
     217        self.__setProxyPriKey(proxyPriKey) 
     218        self.__setUserCert(userCert) 
    193219         
    194220        self.__setCAcertFilePath(caCertFilePath) 
     
    197223        self.__setClntPriKeyPwd(clntPriKeyPwd) 
    198224                 
    199         self.__credRepos = credRepos 
     225        self.__credRepos = credRepos or NullCredRepos() 
    200226         
    201227        # Set behaviour for authorisation requests 
     
    260286         
    261287 
    262  
    263  
    264288    def __str__(self): 
    265289        return "<Credential Wallet instance>" 
    266290 
    267  
    268     #_________________________________________________________________________     
    269     def __setProxyCert(self, proxyCertTxt): 
    270         """Set a new proxy certificate for the wallet 
    271  
    272         proxyCertTxt: input certificate as a string""" 
    273          
    274         try: 
    275             if not isinstance(proxyCertTxt, basestring): 
    276                 raise CredWalletError(\ 
    277                                 "Proxy Certificate must be input as a string") 
    278         except Exception, e: 
    279             raise CredWalletError("Input proxy certificate: %s" % e) 
    280  
    281         self.__proxyCertTxt = proxyCertTxt 
    282         self.__proxyCert = X509Cert() 
    283         self.__proxyCert.parse(proxyCertTxt) 
    284      
    285  
    286     #_________________________________________________________________________ 
    287     # Set Proxy Certificate text also updates the proxyCert X509Cert 
    288     # instance 
    289     def __setProxyCertTxt(self, value): 
    290         """Set proxy cert string and from it update equivalent X509Cert  
    291         instance""" 
    292         self.__setProxyCert(value) 
    293  
    294              
    295     def __getProxyCertTxt(self): 
    296         """Get proxy cert as a string""" 
    297         return self.__proxyCertTxt 
    298   
    299          
    300     def __delProxyCertTxt(self): 
    301         """Prevent deletion of proxy cert string""" 
    302         raise AttributeError("\"proxyCertTxt\" cannot be deleted") 
    303  
    304    
    305     # Publish attribute as read/write 
    306     proxyCertTxt = property(fget=__getProxyCertTxt, 
    307                             fset=__setProxyCertTxt, 
    308                             fdel=__delProxyCertTxt, 
    309                             doc="String text of proxy certificate") 
     291         
     292    #_________________________________________________________________________ 
     293    def __setCert(self, cert): 
     294        """filter and convert input cert to signing verifying cert set  
     295        property methods.  For signingCert, set to None if it is not to be 
     296        included in the SOAP header.  For verifyingCert, set to None if this 
     297        cert can be expected to be retrieved from the SOAP header of the  
     298        message to be verified 
     299         
     300        @type: ndg.security.common.X509.X509Cert / M2Crypto.X509.X509 / 
     301        string or None 
     302        @param cert: X.509 certificate.   
     303         
     304        @rtype ndg.security.common.X509.X509Cert 
     305        @return X.509 certificate object""" 
     306         
     307        if cert is None or isinstance(cert, X509Cert): 
     308            # ndg.security.common.X509.X509Cert type / None 
     309            return cert 
     310             
     311        elif isinstance(cert, X509.X509): 
     312            # M2Crypto.X509.X509 type 
     313            return X509Cert(m2CryptoX509=cert) 
     314             
     315        elif isinstance(cert, basestring): 
     316            return X509CertParse(cert) 
     317         
     318        else: 
     319            raise AttributeError, "X.509 Cert. must be type: " + \ 
     320                "ndg.security.common.X509.X509Cert, M2Crypto.X509.X509 or " +\ 
     321                "a base64 encoded string" 
     322 
     323 
     324    #_________________________________________________________________________ 
     325    def __setProxyCert(self, proxyCert): 
     326        "Set property method for X.509 proxy cert." 
     327        self.__proxyCert = self.__setCert(proxyCert) 
     328         
    310329 
    311330    def __getProxyCert(self): 
     
    316335    # Proxy Cert instance is read-only - to set it, set proxyCertTxt 
    317336    proxyCert = property(fget=__getProxyCert, 
     337                         fset=__setProxyCert, 
    318338                         doc="X.509 proxy certificate instance") 
     339 
     340 
     341    #_________________________________________________________________________ 
     342    def __setUserCert(self, userCert): 
     343        "Set property method for X.509 user cert." 
     344        self.__userCert = self.__setCert(userCert) 
     345         
     346 
     347    def __getUserCert(self): 
     348        """Get user cert X509Cert instance""" 
     349        return self.__userCert 
     350 
     351 
     352    # User Cert instance is read-only - to set it, set proxyCertTxt 
     353    userCert = property(fget=__getUserCert, 
     354                         fset=__setUserCert, 
     355                         doc="X.509 user certificate instance") 
     356      
     357  
     358    #_________________________________________________________________________ 
     359    def __setProxyPriKey(self, proxyPriKey): 
     360        """Set method for client private key 
     361         
     362        Nb. if input is a string, proxyPriKeyPwd will need to be set if 
     363        the key is password protected. 
     364         
     365        @type proxyPriKey: M2Crypto.RSA.RSA / string 
     366        @param proxyPriKey: private key used to sign message""" 
     367         
     368        if isinstance(proxyPriKey, basestring): 
     369            self.__proxyPriKey = RSA.load_key_string(proxyPriKey, 
     370                                             callback=lambda *ar, **kw: None) 
     371 
     372        elif isinstance(proxyPriKey, RSA.RSA): 
     373            self.__proxyPriKey = proxyPriKey  
     374                    
     375        else: 
     376            raise AttributeError, "Proxy private key must be a valid " + \ 
     377                                  "M2Crypto.RSA.RSA type or a string" 
     378                 
     379    proxyPriKey = property(fset=__setProxyPriKey, 
     380                             doc="Private key used to sign outbound message") 
    319381     
    320382     
     
    433495                     
    434496        except Exception, e: 
    435             raise CredWalletError("Attribute Certificate input: %s" % e) 
     497            raise CredWalletError, "Attribute Certificate input: %s" % e 
    436498 
    437499 
     
    483545             
    484546 
    485  
     547    #_________________________________________________________________________ 
    486548    def audit(self): 
    487549        """Check the credentials held in the wallet removing any that have 
     
    498560 
    499561 
    500  
    501                  
     562    #_________________________________________________________________________             
    502563    def updateCredRepos(self, auditCred=True): 
    503564        """Copy over non-persistent credentials held by wallet into the 
     
    518579        self.__credRepos.addCredentials(self.__dn, attCertList) 
    519580 
    520          
     581    #_________________________________________________________________________                     
    521582    def __getAttCert(self, 
    522                            aaPropFilePath=None, 
    523                            aaWSDL=None, 
    524                            aaCertFilePath=None, 
    525                            extAttCert=None, 
    526                            bDebug=False): 
    527          
    528         """Wrapper to Attribute Authority authorisation request.  See 
     583                     aaPropFilePath=None, 
     584                     aaURI=None, 
     585                     extAttCert=None, 
     586                     bDebug=False): 
     587         
     588        """Wrapper to Attribute Authority attribute certificate request.  See 
    529589        getAttCert for the classes' public interface. 
    530590 
    531         To call the Attribute Authority as a Web Service, specify a WSDL 
     591        To call the Attribute Authority as a Web Service, specify a URI 
    532592        otherwise set the properties file path. 
    533593         
     
    535595        and added into the wallet 
    536596 
    537         aaWSDL|aaPropFilePath:  to call as a web service, specify the file 
    538                                 path or URI for the Attribute Authority's 
    539                                 WSDL.  Otherwise, to run on the local machine, 
    540                                 specify a local Attribute Authority 
    541                                 configuration file. 
    542         extAttCert:             an existing Attribute Certificate which can be 
    543                                 used to making a mapping should the user not 
    544                                 be registered with the Attribute Authority""" 
    545              
    546         if aaWSDL is not None: 
     597        @type aaURI: string 
     598        @keyword aaURI: to call as a web service, specify the URI for the  
     599        Attribute Authority. 
     600         
     601        @type aaPropFilePath: string 
     602        @keyword aaPropFilePath: Altenrative to aaURI - to run on the local  
     603        machine, specify the local Attribute Authority configuration file. 
     604 
     605        :              
     606                                 
     607        @type extAttCert: ndg.security.common.AttCert.AttCert 
     608        @keyword extAttCert: an existing Attribute Certificate which can  
     609        be used to making a mapping should the user not be registered with the 
     610        Attribute Authority""" 
     611             
     612        if aaURI is not None: 
    547613            try: 
    548                 aaClnt = AttAuthorityClient(aaWSDL=aaWSDL, 
    549                                 aaCertFilePath=aaCertFilePath, 
    550                                 clntCertFilePath=self.__clntCertFilePath, 
    551                                 clntPriKeyFilePath=self.__clntPriKeyFilePath) 
     614                aaClnt = AttAuthorityClient(aaURI=aaURI, 
     615                                            clntCert=self.__proxyCert, 
     616                                            clntPriKey=self.__proxyPriKey) 
    552617                                     
    553                 authzResp = aaClnt.getAttCert(self.__proxyCertTxt,  
    554                                         userAttCert=extAttCert,  
    555                                         clntPriKeyPwd=self.__clntPriKeyPwd)                 
     618                authzResp = aaClnt.getAttCert(self.__userCert.toString(),  
     619                                              userAttCert=extAttCert)                 
    556620            except Exception, e: 
    557                 raise CredWalletError, "Requesting authorisation: %s" % str(e) 
     621                raise CredWalletError, "Requesting attribute certificate: %s"\ 
     622                                       % str(e) 
    558623 
    559624 
     
    585650            try: 
    586651                # Make a new attribute authority instance  
    587                 aa = AttAuthority(aaPropFilePath) 
     652                aa = AttAuthority(propFilePath=aaPropFilePath) 
    588653 
    589654                # Request a new attribute certificate from the Attribute 
    590655                # Authority 
    591                 attCert = aa.authorise(proxyCert=self.__proxyCertTxt, 
    592                                        userAttCert=extAttCert) 
     656                attCert = aa.getAttCert(userCert=self.__proxyCert, 
     657                                        userAttCert=extAttCert) 
    593658                 
    594659            except AttAuthorityAccessDenied, e: 
     
    601666        else: 
    602667            raise CredWalletError, "Error requesting authorisation: " + \ 
    603                                    "a WSDL file or Attribute Authority " + \ 
     668                                   "a URI or Attribute Authority " + \ 
    604669                                   "configuration file must be specified" 
    605670         
     
    622687 
    623688 
    624  
    625  
     689    #_________________________________________________________________________ 
    626690    def getAATrustedHostInfo(self, 
    627691                             userRole=None, 
    628                              aaWSDL=None, 
    629                              aaCertFilePath=None, 
     692                             aaURI=None, 
    630693                             aaPropFilePath=None, 
    631694                             bDebug=False): 
     
    633696         
    634697        userRole:               get hosts which have a mapping to this role 
    635         aaWSDL|aaPropFilePath:  to call as a web service, specify the file 
     698        aaURI|aaPropFilePath:  to call as a web service, specify the file 
    636699                                path or URI for the Attribute Authority's 
    637700                                WSDL.  Otherwise, to run on the local machine, 
     
    639702                                configuration file.""" 
    640703         
    641         if aaWSDL is not None: 
     704        if aaURI is not None: 
    642705            # Call Attribute Authority WS 
    643706            try: 
    644                 aaClnt = AttAuthorityClient(aaWSDL=aaWSDL, 
    645                                 aaCertFilePath=aaCertFilePath, 
    646                                 clntCertFilePath=self.__clntCertFilePath, 
    647                                 clntPriKeyFilePath=self.__clntPriKeyFilePath) 
     707                aaClnt = AttAuthorityClient(uri=aaURI, 
     708                                        signingCert=self.__proxyCertFilePath, 
     709                                        signingPriKey=self.__clntPriKey) 
    648710                                     
    649                 trustedHostInfo = aaClnt.getTrustedHostInfo(role=userRole, 
    650                                         clntPriKeyPwd=self.__clntPriKeyPwd)                 
     711                trustedHostInfo = aaClnt.getTrustedHostInfo(role=userRole)                 
    651712                return trustedHostInfo 
    652713                            
     
    659720            # Call local based Attribute Authority with settings from the  
    660721            # configuration file aaPropFilePath 
    661             if not instance(aaWSDL, basestring): 
     722            if not instance(aaURI, basestring): 
    662723                raise CredWalletError, "Attribute Authority Configuration " +\ 
    663724                                      "file path must be a valid string" 
     
    676737        else: 
    677738            raise CredWalletError, "Error requesting trusted hosts info: " + \ 
    678                                    "a WSDL file or Attribute Authority " + \ 
     739                                   "a URI or Attribute Authority " + \ 
    679740                                   "configuration file must be specified" 
    680741 
     
    684745                   reqRole=None, 
    685746                   aaPropFilePath=None, 
    686                    aaWSDL=None, 
    687                    aaCertFilePath=None, 
     747                   aaURI=None, 
    688748                   mapFromTrustedHosts=None, 
    689749                   rtnExtAttCertList=None, 
    690750                   extAttCertList=None, 
    691751                   extTrustedHostList=None, 
    692                    refreshAttCert=False): 
     752                   refreshAttCert=False, 
     753                   attCertRefreshElapse=None): 
    693754         
    694755        """For a given role, get authorisation from an Attribute Authority 
     
    697758        has a trust relationship to the Attribute Authority in question. 
    698759 
    699         reqRole:                the required role to get access for 
    700         aaWSDL|aaPropFilePath:  to call as a web service, specify the file 
    701                                 path or URI for the Attribute Authority's 
    702                                 WSDL.  Otherwise, to run on the local machine, 
    703                                 specify a local Attribute Authority 
    704                                 configuration file. 
    705                                  
    706         aaCertFilePath:       Public key of AA used to encrypt client  
    707                                 requests to the AA. 
    708  
    709         mapFromTrustedHosts:    if authorisation fails via the user's proxy 
    710                                 certificate, then it is possible to get a 
    711                                 mapped certificate by using certificates from 
    712                                 other AA's.  Set this flag to True, to allow 
    713                                 this second stage of generating a mapped 
    714                                 certificate from the certificate stored in the 
    715                                 wallet credentials. 
    716  
    717                                 If set to False, it is possible to return the 
    718                                 list of certificates available for mapping and 
    719                                 then choose which one or ones to use for 
    720                                 mapping by re-calling getAttCert with 
    721                                 extAttCertList set to these certificates 
    722  
    723                                 The list is returned via 
    724                                 CredWalletAuthorisationDenied exception 
    725  
    726                                 If no value is set, the default value held 
    727                                 in self.__mapFromTrustedHosts is used 
    728  
    729         rtnExtAttCertList:      If authorisation fails, make a list of  
    730                                 candidate certificates from other Attribute  
    731                                 Authorities which the user could use to retry 
    732                                 and get a mapped certificate. 
    733                                  
    734                                 If mapFromTrustedHosts is set True this flags  
    735                                 value is overriden and effectively set to  
    736                                 True. 
    737  
    738                                 If no value is set, the default value held 
    739                                 in self.__rtnExtAttCertList is used 
    740                                  
    741                                 The list is returned via a 
    742                                 CredWalletAuthorisationDenied exception object 
    743                                  
    744         extAttCertList:         Attribute Certificate or list of certificates 
    745                                 from other Attribute Authorities.  These can 
    746                                 be used to get a mapped certificate if access 
    747                                 fails based on the user's proxy certificate 
    748                                 credentials.  They are tried out in turn until 
    749                                 access is granted so the order of the list 
    750                                 decides the order in which they will be tried 
    751  
    752         extTrustedHostList:     same as extAttCertList keyword, but instead 
    753                                 providing Attribute Certificates, give a list 
    754                                 of Attribute Authority hosts.  These will be 
    755                                 matched up to Attribute Certificates held in 
    756                                 the wallet.  Matching certificates will then 
    757                                 be used to try to get mapped authorisation. 
    758          
    759         refreshAttCert:         if set to True, the authorisation request will 
    760                                 will go ahead even if the wallet already  
    761                                 contains an Attribute Certificate from 
    762                                 the target Attribute Authority.  The existing 
    763                                 AC in the wallet will be replaced by the new 
    764                                 one obtained from this call. 
    765                                  
    766                                 If set to False, this method will check to see 
    767                                 if an AC issued by the target AA already  
    768                                 exists in the wallet.  If so, it will return 
    769                                 this AC to the caller without proceeding to  
    770                                 make a call to the AA. 
    771                                  
     760        getAttCert([reqRole=r, ][aaPropFilePath=f|aaURI=u,] 
     761                   [mapFromTrustedHosts=m, ] 
     762                   [rtnExtAttCertList=e, ][extAttCertList=el, ] 
     763                   [extTrustedHostList=et, ][refreshAttCert=ra]) 
     764                   
    772765        The procedure is: 
    773766 
     
    781774        5) Finally, use these new certificates to try to obtain a mapped 
    782775        certificate from the original AA 
    783         6) If this fails access is denied""" 
    784                                
    785                                
    786         if aaCertFilePath is None: 
    787             # Try retrieving public key from the web service and making a  
    788             # temporary file to hold it 
    789             try: 
    790                 certReq = CertReq() 
    791                 resp = aaSrv.getCert(certReq=certReq()) 
    792                 certResp = CertResp(xmlTxt=resp['certResp']) 
    793          
    794                 if 'errMsg' in certResp and certResp['errMsg']: 
    795                     raise Exception(certResp['errMsg']) 
    796                  
    797                 aaCertTmpFile = tempfile.NamedTemporaryFile() 
    798                 open(aaCertTmpFile.name,"w").write(certResp['cert']) 
    799      
    800                 aaCertFilePath = aaCertTmpFile.name 
    801                  
    802             except IOError, (errNo, errMsg): 
    803                 raise CredWalletError(\ 
    804                     "Writing public key to temporary file: %s" % errMsg) 
    805                                                        
    806             except Exception, e: 
    807                 raise CredWalletError(\ 
    808                     "Retrieving Attribute Authority public key: "+ str(e)) 
     776        6) If this fails access is denied       
     777                     
     778        @type reqRole: string 
     779        @keyword reqRole: the required role to get access for 
     780         
     781        @type aaURI: string 
     782        @keyword aaURI: to call as a web service, specify the URI for the  
     783        Attribute Authority. 
     784         
     785        @type aaPropFilePath: string 
     786        @keyword aaPropFilePath: Altenrative to aaURI - to run on the local  
     787        machine, specify the local Attribute Authority configuration file. 
     788                                 
     789        @type mapFromTrustedHosts: bool        
     790        @keyword mapFromTrustedHosts: if request fails via the user's proxy 
     791        ID, then it is possible to get a mapped certificate by using  
     792        certificates from other AA's.  Set this flag to True, to allow this  
     793        second stage of generating a mapped certificate from the certificate  
     794        stored in the wallet credentials. 
     795 
     796        If set to False, it is possible to return the list of certificates  
     797        available for mapping and then choose which one or ones to use for 
     798        mapping by re-calling getAttCert with extAttCertList set to these  
     799        certificates 
     800 
     801        The list is returned via CredWalletAuthorisationDenied exception 
     802        If no value is set, the default value held in  
     803        self.__mapFromTrustedHosts is used 
     804 
     805        @type rtnExtAttCertList: bool 
     806        @keyword rtnExtAttCertList: If authorisation fails, make a list of  
     807        candidate certificates from other Attribute Authorities which the user 
     808        could use to retry and get a mapped certificate. 
     809                                 
     810        If mapFromTrustedHosts is set True this flags value is overriden and  
     811        effectively set to True. 
     812 
     813        If no value is set, the default value held in self.__rtnExtAttCertList 
     814        is used. 
     815                                 
     816        The list is returned via a CredWalletAuthorisationDenied exception  
     817        object. 
     818                                 
     819        @type extAttCertList: list 
     820        @keyword extAttCertList: Attribute Certificate or list of certificates 
     821        from other Attribute Authorities.  These can be used to get a mapped  
     822        certificate if access fails based on the user's proxy certificate 
     823         credentials.  They are tried out in turn until access is granted so  
     824         the order of the list decides the order in which they will be tried 
     825 
     826        @type extTrustedHostList: 
     827        @keyword extTrustedHostList: same as extAttCertList keyword, but  
     828        instead providing Attribute Certificates, give a list of Attribute  
     829        Authority hosts.  These will be matched up to Attribute Certificates  
     830        held in the wallet.  Matching certificates will then be used to try to 
     831        get a mapped Attribute Certificate. 
     832         
     833        @type refreshAttCert: bool 
     834        @keyword refreshAttCert: if set to True, the authorisation request  
     835        will go ahead even if the wallet already contains an Attribute  
     836        Certificate from the target Attribute Authority.  The existing AC in  
     837        the wallet will be replaced by the new one obtained from this call. 
     838                                 
     839        If set to False, this method will check to see if an AC issued by the  
     840        target AA already exists in the wallet.  If so, it will return this AC 
     841        to the caller without proceeding to make a call to the AA. 
     842         
     843        @type attCertRefreshElapse: float / int 
     844        @keyword attCertRefreshElapse: determine whether to replace an  
     845        existing AC in the cache with a fresh one.  If the existing one has  
     846        less than attCertRefreshElapse time in seconds left before expiry then 
     847        replace it.""" 
    809848 
    810849 
     
    816855            # Find out the site ID for the target AA by calling AA's host 
    817856            # info WS method 
    818             aaClnt = AttAuthorityClient(aaWSDL=aaWSDL,  
    819                                  aaCertFilePath=aaCertFilePath, 
    820                                  clntCertFilePath=self.__clntCertFilePath, 
    821                                  clntPriKeyFilePath=self.__clntPriKeyFilePath) 
    822              
    823             hostInfo = aaClnt.getHostInfo(clntPriKeyPwd=self.__clntPriKeyPwd) 
     857            aaClnt = AttAuthorityClient(uri=aaURI,  
     858                                        signingCert=self.__proxyCert, 
     859                                        signingPriKey=self.__proxyPriKey) 
     860             
     861            hostInfo = aaClnt.getHostInfo() 
    824862            aaName = hostInfo.keys()[0] 
    825863             
     
    828866                # Existing Attribute Certificate found in wallet - Check that  
    829867                # it will be valid for at least the next 2 hours 
    830                 # 
    831                 # TODO: Make this 2 hour offset a configurable parameter 
    832                 # 
    833                 # P J Kershaw 14/06/06 
    834                 dtNow = datetime.utcnow() + timedelta(seconds=7200) 
     868                if attCertRefreshElapse is not None: 
     869                    self.attCertRefreshElapse = attCertRefreshElapse 
     870                     
     871                dtNow = datetime.utcnow() + \ 
     872                        timedelta(seconds=self.attCertRefreshElapse) 
    835873                 
    836874                attCert = self.__credentials[aaName]['attCert'] 
     
    852890        if extTrustedHostList: 
    853891            if not self.__mapFromTrustedHosts: 
    854                 raise CredWalletError("A list of trusted hosts has been " + \ 
    855                                       "input but mapping from trusted " + \ 
    856                                       "hosts is set to disallowed") 
     892                raise CredWalletError, "A list of trusted hosts has been " + \ 
     893                "input but mapping from trusted hosts is set to disallowed" 
    857894             
    858895            if isinstance(extTrustedHostList, basestring): 
     
    861898            # Nb. Any extAttCertList is overriden by extTrustedHostList being 
    862899            # set 
    863             extAttCertList = [] 
    864             for hostName in extTrustedHostList: 
    865  
    866                 if hostName in self.__credentials: 
    867                     extAttCertList.append(\ 
    868                                     self.__credentials[hostName]['attCert']) 
     900            extAttCertList = [self.__credentials[hostName]['attCert'] \ 
     901                              for hostName in extTrustedHostList \ 
     902                              if hostName in self.__credentials] 
    869903 
    870904 
     
    902936            # Request Authorisation from Attribute Authority 
    903937            try: 
    904                 attCert = self.__getAttCert(aaWSDL=aaWSDL, 
    905                                             aaCertFilePath=aaCertFilePath, 
     938                attCert = self.__getAttCert(aaURI=aaURI, 
    906939                                            aaPropFilePath=aaPropFilePath, 
    907940                                            extAttCert=extAttCert)                 
     
    922955#                        "a role in a trusted host") 
    923956 
    924  
    925957                if not mapFromTrustedHosts and not rtnExtAttCertList: 
    926958                    # Creating a mapped certificate is not allowed - raise 
     
    934966                    # them is accepted and a mapped certificate can be derived 
    935967                    continue 
    936                  
    937                  
     968                              
    938969                #  Use the input required role and the AA's trusted host list 
    939970                # to identify attribute certificates from other hosts which 
     
    941972                try: 
    942973                    trustedHostInfo = self.getAATrustedHostInfo(reqRole, 
    943                                             aaWSDL=aaWSDL, 
    944                                             aaCertFilePath=aaCertFilePath, 
     974                                            aaURI=aaURI, 
    945975                                            aaPropFilePath=aaPropFilePath) 
    946976                except Exception, e: 
    947                     raise CredWalletError("Getting trusted hosts: %s" % e) 
     977                    raise CredWalletError, "Getting trusted hosts: %s" % e 
    948978 
    949979                if not trustedHostInfo: 
    950                     raise CredWalletAuthorisationDenied(\ 
     980                    raise CredWalletAuthorisationDenied, \ 
    951981                        "Attribute Authority has no trusted hosts with " + \ 
    952                         "which to make a mapping") 
     982                        "which to make a mapping" 
    953983 
    954984                 
     
    9821012 
    9831013                        try: 
    984                             extAttCert=self.__getAttCert(aaWSDL=val['aaURI']) 
     1014                            extAttCert=self.__getAttCert(aaURI=val['aaURI']) 
    9851015 
    9861016                            # Check the certificate contains at least one of 
     
    9991029                     
    10001030                if not extAttCertList:                         
    1001                     raise CredWalletAuthorisationDenied(\ 
     1031                    raise CredWalletAuthorisationDenied, \ 
    10021032                        "No certificates are available with which to " + \ 
    1003                         "make a mapping to the Attribute Authority") 
     1033                        "make a mapping to the Attribute Authority" 
    10041034 
    10051035 
     
    10331063        try: 
    10341064            tempFile = tempfile.NamedTemporaryFile() 
    1035             (fileName, httpResp) = urllib.urlretrieve(uri, 
    1036                                                       tempFile.name) 
     1065            (fileName, httpResp) = urllib.urlretrieve(uri, tempFile.name) 
    10371066        except Exception, e: 
    1038             raise CredWalletError("Error retrieving from URI " + \ 
    1039                                   "\"%s\": %s" % (uri, str(e))) 
     1067            raise CredWalletError, "Error retrieving from URI " + \ 
     1068                                  "\"%s\": %s" % (uri, str(e)) 
    10401069     
    10411070        # Expecting plain text format for returned public key file 
    10421071        # 404 error would come back as 'text/html' 
    10431072        if 'text/plain' not in httpResp['Content-type']: 
    1044             raise CredWalletError("Error retrieving from URI " + \ 
    1045                                   "\"%s\": expecting \"plain/text\"" % uri) 
     1073            raise CredWalletError, "Error retrieving from URI " + \ 
     1074                                   "\"%s\": expecting \"plain/text\"" % uri 
    10461075             
    10471076        return tempFile 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/SessionMgr/SessionMgr_services.py

    r2063 r2076  
    2929        # no ws-addressing 
    3030 
    31     # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6d0170c> 
     31    # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6cff5ac> 
    3232    def addUser(self, username,passphrase): 
    3333 
     
    4343        return  
    4444 
    45     # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6d01a2c> 
     45    # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6cff8cc> 
    4646    def connect(self, username,passphrase,createServerSess,getCookie): 
    4747 
     
    6363        return proxyCert,proxyPriKey,userCert,cookie 
    6464 
    65     # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6d067ac> 
     65    # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6d0760c> 
    6666    def disconnect(self, userCert,sessID,encrSessionMgrURI): 
    6767 
     
    7878        return  
    7979 
    80     # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6d0694c> 
     80    # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6d077ac> 
    8181    def getAttCert(self, userCert,sessID,encrSessionMgrURI,attAuthorityURI,attAuthorityCert,reqRole,mapFromTrustedHosts,rtnExtAttCertList,extAttCert,extTrustedHost): 
    8282 
     
    100100        attCert = response._attCert 
    101101        statusCode = response._statusCode 
     102        msg = response._msg 
    102103        extAttCert = response._extAttCert 
    103         return attCert,statusCode,extAttCert 
     104        return attCert,statusCode,msg,extAttCert 
    104105 
    105     # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6d06acc> 
     106    # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6d0792c> 
    106107    def getX509Cert(self): 
    107108 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/SessionMgr/SessionMgr_services_types.py

    r2063 r2076  
    1717class ns0: 
    1818    targetNamespace = "urn:ndg:security" 
    19  
    20     class attCertList_Def(ZSI.TC.List, TypeDefinition): 
    21         itemType = (u'urn:ndg:security', u'attCert') 
    22         schema = "urn:ndg:security" 
    23         type = (schema, "attCertList") 
    24         def __init__(self, pname, **kw): 
    25             ZSI.TC.List.__init__(self, pname, **kw) 
    26  
    27     class trustedHostList_Def(ZSI.TC.List, TypeDefinition): 
    28         itemType = (u'urn:ndg:security', u'trustedHost') 
    29         schema = "urn:ndg:security" 
    30         type = (schema, "trustedHostList") 
    31         def __init__(self, pname, **kw): 
    32             ZSI.TC.List.__init__(self, pname, **kw) 
    3319 
    3420    class addUser_Dec(ZSI.TCcompound.ComplexType, ElementDeclaration): 
     
    193179        def __init__(self, **kw): 
    194180            ns = ns0.getAttCertResponse_Dec.schema 
    195             TClist = [ZSI.TC.String(pname="attCert", aname="_attCert", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="statusCode", aname="_statusCode", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="extAttCert", aname="_extAttCert", minOccurs=0, maxOccurs="unbounded", nillable=False, typed=False, encoded=kw.get("encoded"))] 
     181            TClist = [ZSI.TC.String(pname="attCert", aname="_attCert", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="statusCode", aname="_statusCode", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="msg", aname="_msg", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="extAttCert", aname="_extAttCert", minOccurs=0, maxOccurs="unbounded", nillable=False, typed=False, encoded=kw.get("encoded"))] 
    196182            kw["pname"] = ("urn:ndg:security","getAttCertResponse") 
    197183            kw["aname"] = "_getAttCertResponse" 
     
    205191                    self._attCert = None 
    206192                    self._statusCode = None 
     193                    self._msg = None 
    207194                    self._extAttCert = [] 
    208195                    return 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/SessionMgr/__init__.py

    r2072 r2076  
    8686 
    8787    #_________________________________________________________________________ 
    88     def __getSignatureHandler(self, uri): 
     88    def __getSignatureHandler(self): 
    8989        "Get SignatureHandler object property method" 
    9090        return self.__signatureHandler 
     
    272272            encrSessionMgrURI = sessCookie.encrSessionMgrURI 
    273273             
    274         elif not sessID and not encrSessionMgrURI and not proxyCert: 
    275             raise SessionMgrClientError, \ 
    276                 '"proxyCert" or "sessCookie or "sessID" and ' + \ 
    277                 '"encrSessionMgrURI" keywords must be set' 
     274        elif not sessID and not encrSessionMgrURI: 
     275            raise SessionMgrClientError, '"sessCookie or "sessID" and ' + \ 
     276                                '"encrSessionMgrURI" keywords must be set' 
    278277 
    279278        # Make connection 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/XMLSec.py

    r2072 r2076  
    775775                                      signatureValue) 
    776776        except RSA.RSAError: 
    777             raise InvalidSignature, "Error in Signature" 
     777            raise VerifyError, "Error in Signature: " + str(e) 
    778778         
    779779        if not verify: 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/wsSecurity.py

    r2072 r2076  
    506506    def verify(self, parsedSOAP): 
    507507        """Verify signature""" 
    508          
     508 
    509509        processorNss = \ 
    510510        { 
     
    596596            # Reference validates if the two digest values are the same 
    597597            if digestValue != nodeDigestValue: 
    598                 raise VerifyError, \ 
     598                raise InvalidSignature, \ 
    599599                        'Digest Values do not match for URI: "%s"' % refURI 
    600600                 
     
    676676            verify = bool(rsaPubKey.verify(signedInfoDigestValue,  
    677677                                           signatureValue)) 
    678         except RSA.RSAError: 
    679             raise InvalidSignature, "Error in Signature" 
     678        except RSA.RSAError, e: 
     679            raise VerifyError, "Error in Signature: " + str(e) 
    680680         
    681681        if not verify: 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/SessionMgr/SessionMgr_services_server.py

    r2063 r2076  
    6464        <xsd:complexType/> 
    6565      </xsd:element> 
    66        
    67       <xsd:simpleType name=\"attCertList\"> 
    68         <xsd:list itemType=\"tns:attCert\"/> 
    69       </xsd:simpleType> 
    70  
    71       <xsd:simpleType name=\"trustedHostList\"> 
    72                 <xsd:list itemType=\"tns:trustedHost\"/> 
    73       </xsd:simpleType> 
    74        
     66             
    7567      <xsd:element name=\"getAttCert\"> 
    7668        <xsd:complexType> 
     
    9587                <xsd:element maxOccurs=\"1\" minOccurs=\"0\" name=\"attCert\" type=\"xsd:string\"/> 
    9688                <xsd:element maxOccurs=\"1\" minOccurs=\"1\" name=\"statusCode\" type=\"xsd:string\"/> 
     89                <xsd:element maxOccurs=\"1\" minOccurs=\"0\" name=\"msg\" type=\"xsd:string\"/> 
    9790                        <xsd:element maxOccurs=\"unbounded\" minOccurs=\"0\" name=\"extAttCert\" type=\"xsd:string\"/> 
    9891              </xsd:sequence> 
     
    318311        # If we have an implementation object, copy the result  
    319312        if hasattr(self,'impl'): 
    320             # Should have a tuple of 3 args 
     313            # Should have a tuple of 4 args 
    321314            result._attCert = parameters[0] 
    322315            result._statusCode = parameters[1] 
    323             result._extAttCert = parameters[2] 
     316            result._msg = parameters[2] 
     317            result._extAttCert = parameters[3] 
    324318        return self.request, result 
    325319 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/SessionMgr/__init__.py

    r2072 r2076  
    4747from ndg.security.common.SessionCookie import SessionCookie 
    4848 
    49 # Use in SessionMgr __redirectAuthorisationReq to retrieve and store Public  
     49# Use in SessionMgr __redirectAttCertReq to retrieve and store Public  
    5050# key 
    5151import tempfile 
     
    717717            if getCookie or createServerSess: 
    718718                # Session Manager creates and manages user's session 
    719                 userSess = self.__createUserSession(proxyCert) 
     719                userSess = self.__createUserSession(proxyCert,  
     720                                                    proxyPriKey,  
     721                                                    userCert) 
    720722                                 
    721723            if getCookie:                 
     
    731733        
    732734    #_________________________________________________________________________         
    733     def __createUserSession(self, proxyCert): 
     735    def __createUserSession(self, *proxy): 
    734736        """Create a new user session from input user credentials        
    735737        and return 
    736738         
    737         @param proxyCert: string containing proxy certificate, private key 
     739        @type proxy: tuple 
     740        @param proxy: tuple containing proxy certificate, private key 
    738741        and issuing certificate.""" 
    739742         
    740743        # Check for an existing session for the same user 
    741744        try: 
    742             userDN = str(X509CertParse(proxyCert).dn) 
     745            userDN = str(X509CertParse(proxy[0]).dn) 
    743746             
    744747        except Exception, e: 
     
    763766            # encryption for responses from Attribute Authority WS 
    764767            try:    
    765                 userSess = UserSession(proxyCert,  
     768                userSess = UserSession(\ 
    766769                                   caCertFilePath=self.__prop['caCertFile'], 
    767770                                   clntCertFilePath=self.__prop['certFile'], 
    768771                                   clntPriKeyFilePath=self.__prop['keyFile'], 
    769772                                   clntPriKeyPwd=self.__prop['keyPwd'], 
    770                                    credRepos=self.__credRepos)        
     773                                   credRepos=self.__credRepos,  
     774                                   *proxy)       
    771775            except Exception, e: 
    772776                raise SessionMgrError, "Creating User Session: %s" % str(e) 
     
    824828                 
    825829         
    826         elif 'proxyCert' in idKw: 
     830        elif 'userCert' in idKw: 
    827831            try: 
    828                 userDN = str(X509CertParse(idKw['proxyCert']).dn) 
     832                userDN = str(X509CertParse(idKw['userCert']).dn) 
    829833                 
    830834            except Exception, e: 
    831835                raise SessionMgrError, \ 
    832                 "Parsing input proxy certificate DN for session connect: %s"%\ 
    833                                                                         str(e) 
     836                "Parsing input user certificate DN for session connect: %s" %e 
    834837            try: 
    835838                userSess = self.__dnDict[userDN] 
     
    846849                                         
    847850            except Exception, e: 
    848                 raise SessionMgrError(\ 
    849                 "Matching proxy certificate to existing user session: %s" % e) 
     851                raise SessionMgrError, \ 
     852                "Matching proxy certificate to existing user session: %s" % e 
    850853        else: 
    851854            raise SessionMgrError,\ 
     
    933936                 
    934937                # Session is held on a remote Session  Manager 
    935                 userSessMgrResp = self.__redirectAuthorisationReq(\ 
     938                userSessMgrResp = self.__redirectAttCertReq(\ 
    936939                                                        userSessMgrURI, 
    937940                                                        **kw) 
     
    954957            idKw['sessID'] = kw['sessID'] 
    955958             
    956         elif 'proxyCert' in kw: 
    957             idKw['proxyCert'] = kw['proxyCert']            
     959        elif 'userCert' in kw: 
     960            idKw['userCert'] = kw['userCert']            
    958961        else: 
    959             raise SessionMgrError,'Expecting "sessID" or "proxyCert" keywords' 
     962            raise SessionMgrError,'Expecting "sessID" or "userCert" keywords' 
    960963                                 
    961964        userSess = self.__connect2UserSession(**idKw) 
     
    966969        # 
    967970        # Nb. the following keys aren't required 
    968         delKeys = ('proxyCert', 
     971        delKeys = ('userCert', 
    969972                   'sessID', 
    970973                   'encrSessMgrURI',  
     
    977980            # Get public key using WS 
    978981            try: 
    979                 aaClnt = AttAuthorityClient(aaWSDL=kw['aaWSDL'])                 
     982                aaClnt = AttAuthorityClient(uri=kw['aaURI'])                 
    980983                kw['aaCert'] = aaClnt.getCert() 
    981984 
     
    10241027 
    10251028    #_________________________________________________________________________ 
    1026     def __redirectAuthorisationReq(self, userSessMgrURI, **kw): 
     1029    def __redirectAttCertReq(self, userSessMgrURI, **kw): 
    10271030        """Handle case where User session resides on another Session Manager - 
    10281031        forward the request 
    10291032         
     1033        @type userSessMgrURI: string 
    10301034        @param userSessMgrURI: address of remote session manager where user 
    10311035        session is held 
    10321036         
     1037        @type **kw: dict 
    10331038        @param **kw: same keywords which apply to getAttCert call""" 
    10341039         
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/SessionMgr/server-config.tac

    r2070 r2076  
    6262 
    6363    def soap_disconnect(self, ps, **kw): 
    64         #import pdb;pdb.set_trace() 
     64        import pdb;pdb.set_trace() 
    6565        request, response = SessionMgrService.soap_disconnect(self, ps) 
    6666        return request, response 
    6767 
    6868    def soap_getAttCert(self, ps, **kw): 
    69         #import pdb;pdb.set_trace() 
     69        import pdb;pdb.set_trace() 
    7070        request, response = SessionMgrService.soap_getAttCert(self, ps) 
     71         
     72        # Get certificate corresponding to private key that signed the 
     73        # message - i.e. the user's proxy 
     74        proxyCert = WSSecurityHandler.signatureHandler.verifyingCert 
     75        userCert = request.get_element_userCert() 
     76         
     77                # Proxy cert is prefered over userCert - userCert may have been  
     78                # omitted. 
     79        attCert, statCode, msg, extAttCertList = self.sm.getAttCert(\ 
     80                    userCert=proxyCert or userCert, 
     81                        sessID=request.get_element_sessID(), 
     82                        encrSessMgrURI=request.get_element_encrSessionMgrURI(), 
     83                        aaURI=request.get_element_attAuthorityURI(), 
     84                        reqRole=request.get_element_reqRole(), 
     85                        mapFromTrustedHosts=request.get_element_mapFromTrustedHosts(), 
     86                        rtnExtAttCertList=request.get_element_rtnExtAttCertList(), 
     87                        extAttCertList=request.get_element_extAttCert(), 
     88                        extTrustedHostList=request.get_element_extTrustedHost()) 
     89 
     90 
    7191        response.set_element_attCert(attCert) 
    72         response.set_element_statusCode('AcessGranted') 
     92        response.set_element_statusCode(statCode) 
     93        response.set_element_statusCode(msg) 
     94        response.set_element_extAttCert(extAttCertList) 
     95         
    7396        return request, response 
    7497 
     
    86109# public and private keys 
    87110WSSecurityHandler.signatureHandler = SignatureHandler(\ 
    88                                             certFilePath=smSrv.sm['certFile'], 
    89                                             priKeyFilePath=smSrv.sm['keyFile'], 
    90                                             priKeyPwd=smSrv.sm['keyPwd']) 
     111                                    signingCertFilePath=smSrv.sm['certFile'], 
     112                                    signingPriKeyFilePath=smSrv.sm['keyFile'], 
     113                                    signingPriKeyPwd=smSrv.sm['keyPwd']) 
    91114 
    92115# Add Service to Session Manager branch 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/SessionMgr/SessionMgrClientTest.py

    r2070 r2076  
    5252        # Omit traceFile keyword to leave out SOAP debug info 
    5353        self.clnt = SessionMgrClient(uri=self.cfg['setUp']['smuri'], 
    54                 srvCertFilePath=self.cfg['setUp']['srvcertfilepath'], 
    55                 clntCertFilePath=self.cfg['setUp']['clntcertfilepath'], 
    56                 clntPriKeyFilePath=self.cfg['setUp']['clntprikeyfilepath'], 
    57                 clntPriKeyPwd=clntPriKeyPwd, 
     54                verifyingCertFilePath=self.cfg['setUp']['srvcertfilepath'], 
     55                signingCertFilePath=self.cfg['setUp']['clntcertfilepath'], 
     56                signingPriKeyFilePath=self.cfg['setUp']['clntprikeyfilepath'], 
     57                signingPriKeyPwd=clntPriKeyPwd, 
    5858                tracefile=tracefile)  
    5959         
     
    117117        self.test2CookieConnect() 
    118118         
    119         self.clnt.disconnect(sessCookie=str(self.sessCookie)) 
     119        # Use proxy cert / private key just obtained from connect call for 
     120        # signature generation 
     121        self.clnt.signatureHandler.signingCert = self.proxyCert 
     122        self.clnt.signatureHandler.signingCertPriKey = self.proxyPriKey 
     123         
     124        self.clnt.disconnect(#userCert=self.userCert, 
     125                             #sessCookie=str(self.sessCookie) 
     126                             #sessID="A", 
     127                             #encrSessionMgrURI="B" 
     128                             ) 
     129         
    120130        print "User disconnected from Session Manager:\n%s" % self.sessCookie 
    121131             
     
    143153        print "\n\t" + self.test6CookieGetAttCert.__doc__         
    144154        self.test2CookieConnect() 
    145         attCert, statusCode, extAttCertList = self.clnt.reqAuthorisation(\ 
     155        attCert, statusCode, extAttCertList = self.clnt.getAttCert(\ 
    146156            sessID=self.sessCookie.sessionID,  
    147157            attAuthorityURI=self.cfg['test6CookieGetAttCert']['aauri'], 
     
    149159         
    150160        print "Attribute Certificate:\n%s" % attCert   
    151         print "User authorisation: %s" % statusCode 
     161        print "User access: %s" % statusCode 
    152162        print "External Attribute Certificate List:\n%s" % extAttCertList 
    153163 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/SessionMgr/sessionMgrClientTest.cfg

    r2072 r2076  
    4444 
    4545[test6CookieGetAttCert] 
    46 aaURI = https://localhost:5000/AttributeAuthority 
     46aaURI = http://localhost:5000/AttributeAuthority 
    4747 
    4848[test6aCookieGetAttCertWithExtAttCertList] 
    49 aaURI = https://localhost:5000/AttributeAuthority 
     49aaURI = http://localhost:5000/AttributeAuthority 
    5050 
    5151[test7ProxyCertGetAttCert] 
    52 aaURI = https://localhost:5000/AttributeAuthority 
     52aaURI = http://localhost:5000/AttributeAuthority 
    5353 
    5454 
  • TI12-security/trunk/python/www/html/sessionMgr.wsdl

    r2063 r2076  
    6161        <xsd:complexType/> 
    6262      </xsd:element> 
    63        
    64       <xsd:simpleType name="attCertList"> 
    65         <xsd:list itemType="tns:attCert"/> 
    66       </xsd:simpleType> 
    67  
    68       <xsd:simpleType name="trustedHostList"> 
    69                 <xsd:list itemType="tns:trustedHost"/> 
    70       </xsd:simpleType> 
    71        
     63             
    7264      <xsd:element name="getAttCert"> 
    7365        <xsd:complexType> 
     
    9284                <xsd:element name="attCert" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
    9385                <xsd:element name="statusCode" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
     86                <xsd:element name="msg" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
    9487                        <xsd:element name="extAttCert" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/> 
    9588              </xsd:sequence> 
Note: See TracChangeset for help on using the changeset viewer.