Ignore:
Timestamp:
23/10/06 12:10:03 (13 years ago)
Author:
pjkersha
Message:

Experimented with namespaces for SignatureHandler? to try to get working with WebSphere?.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/python/Tests/SimpleCA/wsSecurity.py

    r1542 r1618  
    5858    BLOCK_TRIPLEDES = "http://www.w3.org/2001/04/xmlenc#tripledes-cbc" 
    5959 
    60  
     60class _WSU(WSU): 
     61    '''Try different utility namespace for use with WebSphere''' 
     62    #UTILITY = "http://schemas.xmlsoap.org/ws/2003/06/utility" 
     63    UTILITY = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" 
     64     
    6165def getElements(node, nameList): 
    6266    '''DOM Helper function for getting child elements from a given node''' 
     
    96100 
    97101        soapWriter._header.setNamespaceAttribute('wsse', OASIS.WSSE) 
    98         soapWriter._header.setNamespaceAttribute('wsu', WSU.UTILITY) 
     102        soapWriter._header.setNamespaceAttribute('wsu', _WSU.UTILITY) 
    99103        soapWriter._header.setNamespaceAttribute('ds', DSIG.BASE) 
    100104         
     
    108112        binSecTokElem = wsseElem.createAppendElement(OASIS.WSSE,  
    109113                                                     'BinarySecurityToken') 
    110         binSecTokElem.node.setAttribute('ValueType', "wsse:X509v3") 
    111         binSecTokElem.node.setAttribute('EncodingType', "wsse:Base64Binary") 
     114#        binSecTokElem.node.setAttribute('ValueType', "wsse:X509v3") 
     115        valueType = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509" 
     116        binSecTokElem.node.setAttribute('ValueType', valueType) 
     117#        binSecTokElem.node.setAttribute('EncodingType', "wsse:Base64Binary") 
     118        encodingType = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" 
     119        binSecTokElem.node.setAttribute('EncodingType', encodingType) 
    112120         
    113121        # Add ID so that the binary token can be included in the signature 
    114         binSecTokElem.node.setAttribute('wsu:Id', "binaryToken") 
     122        #binSecTokElem.node.setAttribute('wsu:Id', "binaryToken") 
    115123 
    116124        binSecTokElem.createAppendTextNode(x509CertStr) 
     
    133141        sigMethodElem = signedInfoElem.createAppendElement(DSIG.BASE, 
    134142                                                    'SignatureMethod') 
    135         sigMethodElem.node.setAttribute('Algorithm', DSIG.DIGEST_SHA1) 
     143        #sigMethodElem.node.setAttribute('Algorithm', DSIG.DIGEST_SHA1) 
     144        sigMethodElem.node.setAttribute('Algorithm', DSIG.SIG_RSA_SHA1) 
    136145         
    137146        # Signature - Signature value 
     
    151160        # Add Reference to body so that it can be included in the signature 
    152161        soapWriter.body.node.setAttribute('wsu:Id', "body") 
    153         soapWriter.body.node.setAttribute('xmlns:wsu', WSU.UTILITY) 
     162        soapWriter.body.node.setAttribute('xmlns:wsu', _WSU.UTILITY) 
    154163 
    155164        # Serialize and re-parse prior to reference generation - calculating 
     
    162171        { 
    163172            'ds':     DSIG.BASE,  
    164             'wsu':    WSU.UTILITY,  
     173            'wsu':    _WSU.UTILITY,  
    165174            'wsse':   OASIS.WSSE,  
    166175            'soapenv':"http://schemas.xmlsoap.org/soap/envelope/"  
     
    178187            # Set URI attribute to point to reference to be signed 
    179188            #uri = u"#" + idNode.getAttribute('wsu:Id') 
    180             uri = u"#" + idNode.attributes[(WSU.UTILITY, 'Id')].value 
     189            uri = u"#" + idNode.attributes[(_WSU.UTILITY, 'Id')].value 
    181190             
    182191            # Canonicalize reference 
     
    195204             
    196205            # Use ds:Transforms or wsse:TransformationParameters? 
    197             tranformsElem = refElem.createAppendElement(DSIG.BASE,  
    198                                                         'Transforms') 
    199             tranformElem = tranformsElem.createAppendElement(DSIG.BASE,  
    200                                                              'Transform') 
    201             tranformElem.node.setAttribute('Algorithm', DSIG.C14N) 
     206#            transformsElem = refElem.createAppendElement(DSIG.BASE,  
     207#                                                        'Transforms') 
     208#            transformElem = tranformsElem.createAppendElement(DSIG.BASE,  
     209#                                                             'Transform') 
     210#            transformElem.node.setAttribute('Algorithm', DSIG.C14N) 
    202211             
    203212            # Digest Method  
     
    264273    def verify(self, parsedSOAP): 
    265274        """Verify signature""" 
    266          
     275     
    267276        processorNss = \ 
    268277        { 
    269278            'ds':     DSIG.BASE,  
    270             'wsu':    WSU.UTILITY,  
     279            'wsu':    _WSU.UTILITY,  
    271280            'wsse':   OASIS.WSSE,  
    272281            'soapenv':"http://schemas.xmlsoap.org/soap/envelope/"  
     
    290299        # validation  
    291300         
    292         # 1) Reference Validation        
     301        # 1) Reference Validation 
     302         
     303        # Check for canonicalization set via ds:CanonicalizationMethod - 
     304        # Use this later as a back up in case no Canonicalization was set in  
     305        # the transforms elements 
     306        c14nMethodNode = xpath.Evaluate('//ds:CanonicalizationMethod',  
     307                                  contextNode=parsedSOAP.dom,  
     308                                  context=ctxt)[0] 
     309         
    293310        refNodes = xpath.Evaluate('//ds:Reference',  
    294311                                  contextNode=parsedSOAP.dom,  
     
    299316            refURI = refNode.getAttributeNodeNS(None, 'URI').value 
    300317                             
    301             transformsNode = getElements(refNode, "Transforms")[0] 
    302             transforms = getElements(transformsNode, "Transform") 
     318            try: 
     319                transformsNode = getElements(refNode, "Transforms")[0] 
     320                transforms = getElements(transformsNode, "Transform") 
    303321     
    304             algorithm = transforms[0].getAttributeNodeNS(None,  
     322                algorithm = transforms[0].getAttributeNodeNS(None,  
    305323                                                         "Algorithm").value 
    306              
     324            except Exception, e: 
     325                # Check for ds:CanonicalizationMethod treid for earlier 
     326                algorithm = c14nMethodNode.getAttributeNodeNS(None,  
     327                                                         "Algorithm").value 
     328                 
    307329            # Add extra keyword for Exclusive canonicalization method 
    308330            kw = {} 
     
    387409            raise VerifyError, "Invalid Signature" 
    388410         
    389         import pdb;pdb.set_trace() 
     411#        import pdb;pdb.set_trace() 
    390412        print "Signature OK" 
    391413 
     
    585607        encrKeyCiphValElem.createAppendTextNode(encrKeyCiphVal) 
    586608 
    587         print soapWriter.dom.node.toprettyxml() 
    588         import pdb;pdb.set_trace() 
     609#        print soapWriter.dom.node.toprettyxml() 
     610#        import pdb;pdb.set_trace() 
    589611         
    590612         
     
    596618            'xenc':   _ENCRYPTION.BASE, 
    597619            'ds':     DSIG.BASE,  
    598             'wsu':    WSU.UTILITY,  
     620            'wsu':    _WSU.UTILITY,  
    599621            'wsse':   OASIS.WSSE,  
    600622            'soapenv':"http://schemas.xmlsoap.org/soap/envelope/"  
     
    730752            # Parse the encrypted data - inherit from Reader as a fudge to  
    731753            # enable relevant namespaces to be added prior to parse 
    732             processorNss.update({'xsi': SCHEMA.XSI3}) 
     754            processorNss.update({'xsi': SCHEMA.XSI3, 'ns1': 'urn:ZSI:examples'}) 
    733755            class _Reader(Reader): 
    734756                def initState(self, ownerDoc=None): 
     
    751773            parsedSOAP.body_root = parsedSOAP.body.childNodes[0] 
    752774            print decryptedData 
    753             import pdb;pdb.set_trace() 
     775            #import pdb;pdb.set_trace() 
    754776            
    755777 
Note: See TracChangeset for help on using the changeset viewer.