Changeset 6052


Ignore:
Timestamp:
26/11/09 12:01:22 (10 years ago)
Author:
pjkersha
Message:

Updated MyProxy? Cert extension app for use with improved SAML Attribute Query interface class AttributeQuerySslSOAPBinding

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

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/python/ndg_security_common/ndg/security/common/saml_utils/bindings.py

    r6050 r6052  
    231231 
    232232class AttributeQuerySOAPBinding(SOAPBinding):  
    233     """SAML Attribute Query SOAP Binding""" 
     233    """SAML Attribute Query SOAP Binding 
     234     
     235    Nb. Assumes X.509 subject type for query issuer 
     236    """ 
    234237    SUBJECT_ID_OPTNAME = 'subjectID' 
    235238    ISSUER_DN_OPTNAME = 'issuerDN' 
     
    375378            raise TypeError('Expecting string or X500DN type for "issuerDN"; ' 
    376379                            'got %r instead' % type(value)) 
    377         self.__issuerDN = value 
    378380 
    379381    issuerDN = property(_getIssuerDN, _setIssuerDN,  
     
    406408        attributeQuery.issueInstant = datetime.utcnow() 
    407409         
     410        if self.issuerDN is None: 
     411            raise AttributeError('No issuer DN has been set for SAML Attribute ' 
     412                                 'Query') 
     413         
    408414        attributeQuery.issuer = Issuer() 
    409415        attributeQuery.issuer.format = Issuer.X509_SUBJECT 
    410         attributeQuery.issuer.value = self.issuerDN 
     416        attributeQuery.issuer.value = str(self.issuerDN) 
    411417                         
    412418        attributeQuery.subject = Subject()   
  • TI12-security/trunk/python/ndg_security_common/ndg/security/common/utils/m2crypto.py

    r6050 r6052  
    272272        self.__sslValidDNs = [] 
    273273 
    274     def createCtx(self, **kw): 
     274    def createCtx(self, depth=9, **kw): 
    275275        """Create an M2Crypto SSL Context from this objects properties 
     276        @type depth: int 
     277        @param depth: max. depth of certificate to verify against 
     278        @type kw: dict 
     279        @param kw: M2Crypto.SSL.Context keyword arguments 
    276280        @rtype: M2Crypto.SSL.Context 
    277281        @return M2Crypto SSL context object 
    278282        """ 
    279283        ctx = SSL.Context(**kw) 
     284         
     285        # Configure context according to this proxy's attributes 
    280286        if self.sslCertFilePath and self.sslPriKeyFilePath: 
     287            # Pass client certificate 
    281288            ctx.load_cert(self.sslCertFilePath,  
    282289                          self.__sslPriKeyFilePath,  
    283290                          lambda *arg, **kw: self.sslPriKeyPwd) 
    284          
     291            log.debug("Set client certificate and key in SSL Context") 
     292        else: 
     293            log.debug("No client certificate or key set in SSL Context") 
     294             
    285295        if self.sslCACertFilePath or self.sslCACertDir: 
     296            # Set CA certificates in order to verify peer 
    286297            ctx.load_verify_locations(self.sslCACertFilePath,  
    287298                                      self.sslCACertDir) 
    288              
    289         ctx.set_verify(SSL.verify_peer|SSL.verify_fail_if_no_peer_cert, 9, 
    290                        callback=self.createVerifySSLPeerCertCallback()) 
     299            mode = SSL.verify_peer|SSL.verify_fail_if_no_peer_cert 
     300        else: 
     301            mode = SSL.verify_fail_if_no_peer_cert 
     302            log.warning('No CA certificate files set: mode set to ' 
     303                        '"verify_fail_if_no_peer_cert" only') 
     304             
     305        if len(self.sslValidDNs) > 0: 
     306            # Set custom callback in order to verify peer certificate DN  
     307            # against whitelist 
     308            callback = self.createVerifySSLPeerCertCallback() 
     309            log.debug('Set peer certificate Distinguished Name check set in ' 
     310                      'SSL Context') 
     311        else: 
     312            callback = None 
     313            log.warning('No peer certificate Distinguished Name check set in ' 
     314                        'SSL Context') 
     315             
     316        ctx.set_verify(mode, depth, callback=callback) 
    291317            
    292318        return ctx 
  • TI12-security/trunk/python/ndg_security_server/ndg/security/server/myproxy/certificate_extapp/saml_attribute_assertion.py

    r6051 r6052  
    148148        """ 
    149149        self.__attributeQuery.subjectID = self.queryOpenId(username) 
    150         response = self.__attributeQuery.send( 
    151                                                 uri=self.attributeAuthorityURI) 
     150        response = self.__attributeQuery.send(uri=self.attributeAuthorityURI) 
    152151         
    153152        try: 
     
    318317 
    319318    DEBUG_ENVVAR_NAME = 'NDGSEC_MYPROXY_CERT_EXT_APP_DEBUG' 
    320  
     319     
     320    # Essential to have slots declaration otherwise superclass __setattr__ 
     321    # will not behave correctly 
     322    __slots__ = () 
     323     
    321324    @classmethod 
    322325    def run(cls): 
  • TI12-security/trunk/python/ndg_security_test/ndg/security/test/config/attributeauthority/sitea/siteAUserRoles.py

    r6039 r6052  
    1414from uuid import uuid4 
    1515 
     16from saml.common.xml import SAMLConstants 
     17from saml.saml2.core import (Assertion, Attribute, AttributeStatement, Issuer, 
     18                             SAMLVersion, Subject, NameID, Conditions, 
     19                             XSStringAttributeValue) 
    1620 
     21from ndg.security.common.X509 import X500DN 
    1722from ndg.security.server.attributeauthority import (AttributeInterface,  
    1823                                                    InvalidRequestorId,  
     
    2025                                                    AttributeReleaseDenied,  
    2126                                                    UserIdNotKnown) 
    22 from saml.common.xml import SAMLConstants 
    23 from saml.saml2.core import (Assertion, Attribute, AttributeStatement, Issuer, 
    24                              SAMLVersion, Subject, NameID, Conditions, 
    25                              XSStringAttributeValue) 
    2627 
    2728 
     
    8182     
    8283    VALID_USER_IDS = ("https://openid.localhost/philip.kershaw",) 
    83     VALID_REQUESTOR_IDS = ("/O=Site A/CN=Authorisation Service",  
    84                            "/O=Site B/CN=Authorisation Service") 
     84    VALID_REQUESTOR_IDS = ( 
     85        str(X500DN.fromString("/O=Site A/CN=Authorisation Service")),  
     86        str(X500DN.fromString("/O=Site B/CN=Authorisation Service")) 
     87    ) 
    8588     
    8689    ISSUER_NAME = "/O=Site A/CN=Attribute Authority" 
    8790     
    88     INSUFFICIENT_PRIVILEGES_REQUESTOR_ID = "/O=Site B/CN=Authorisation Service" 
     91    INSUFFICIENT_PRIVILEGES_REQUESTOR_ID = str( 
     92                    X500DN.fromString("/O=Site B/CN=Authorisation Service")) 
    8993     
    9094    def __init__(self, propertiesFilePath=None): 
  • TI12-security/trunk/python/ndg_security_test/ndg/security/test/unit/__init__.py

    r6051 r6052  
    6464                                    SITEB_ATTRIBUTEAUTHORITY_PORTNUM 
    6565                                     
     66    SITEA_SSL_ATTRIBUTEAUTHORITY_PORTNUM = 5443 
     67    SITEA_SSL_ATTRIBUTEAUTHORITY_SAML_URI = \ 
     68        'https://localhost:%d/AttributeAuthority/saml' % \ 
     69                                    SITEA_SSL_ATTRIBUTEAUTHORITY_PORTNUM 
     70    SSL_CERT_DN = "/C=UK/ST=Oxfordshire/O=BADC/OU=Security/CN=localhost" 
     71                                     
    6672    SITEA_SAML_ISSUER_NAME = "/O=Site A/CN=Attribute Authority" 
    6773     
     
    8086    NDGSEC_TEST_CONFIG_DIR = os.environ.get(configDirEnvVarName,  
    8187                                            TEST_CONFIG_DIR) 
     88     
     89    CACERT_DIR = os.path.join(NDGSEC_TEST_CONFIG_DIR, 'ca') 
     90    PKI_DIR = os.path.join(NDGSEC_TEST_CONFIG_DIR, 'pki') 
     91    SSL_CERT_FILEPATH = os.path.join(PKI_DIR, 'localhost.crt') 
     92    SSL_PRIKEY_FILEPATH = os.path.join(PKI_DIR, 'localhost.key') 
    8293     
    8394    # Test database set-up 
  • TI12-security/trunk/python/ndg_security_test/ndg/security/test/unit/attributeauthorityclient/test_attributeauthorityclient.py

    r6050 r6052  
    1414 
    1515import unittest 
    16 import os, sys, getpass, re 
     16import os, re 
    1717     
    1818from os.path import expandvars as xpdVars 
     
    2020mkPath = lambda file: jnPath(os.environ['NDGSEC_AACLNT_UNITTEST_DIR'], file) 
    2121 
    22 from datetime import datetime, timedelta 
     22from datetime import datetime 
    2323from uuid import uuid4 
    2424from xml.etree import ElementTree 
     
    3535    CaseSensitiveConfigParser) 
    3636 
    37 from saml.utils import SAMLDateTime 
    3837from saml.common.xml import SAMLConstants 
    3938from saml.saml2.core import (Attribute, SAMLVersion, Subject, NameID, Issuer,  
     
    329328        attributeQuery.issuer = Issuer() 
    330329        attributeQuery.issuer.format = Issuer.X509_SUBJECT 
    331         attributeQuery.issuer.value = "/O=Site A/CN=Authorisation Service"     
     330        attributeQuery.issuer.value = "/CN=Authorisation Service/O=Site A"     
    332331                         
    333332        attributeQuery.subject = Subject()   
     
    433432        attributeQuery.issuer = Issuer() 
    434433        attributeQuery.issuer.format = Issuer.X509_SUBJECT 
    435         attributeQuery.issuer.value = "/O=Site A/CN=Authorisation Service"     
     434        attributeQuery.issuer.value = "/CN=Authorisation Service/O=Site A"     
    436435                         
    437436        attributeQuery.subject = Subject()   
     
    470469        attributeQuery.issuer = Issuer() 
    471470        attributeQuery.issuer.format = Issuer.X509_SUBJECT 
    472         attributeQuery.issuer.value = "/O=Site A/CN=Authorisation Service"     
     471        attributeQuery.issuer.value = "/CN=Authorisation Service/O=Site A"     
    473472                         
    474473        attributeQuery.subject = Subject()   
  • TI12-security/trunk/python/ndg_security_test/ndg/security/test/unit/myproxy/certificate_extapp/config.ini

    r6051 r6052  
    1212connectionString = sqlite:///$NDGSEC_TEST_CONFIG_DIR/user.db 
    1313openIdSqlQuery = select openid from users where username = '${username}'      
    14 attributeAuthorityURI = http://localhost:5000/AttributeAuthority/saml 
     14attributeAuthorityURI = https://localhost:5443/AttributeAuthority/saml 
    1515attributeQuery.issuerDN = /O=Site A/CN=Authorisation Service 
    1616attributeQuery.clockSkew = 0 
    1717attributeQuery_queryAttributes.0 = urn:esg:email:address, EmailAddress, http://www.w3.org/2001/XMLSchema#string 
    1818attributeQuery.queryAttributes.roles = urn:siteA:security:authz:1.0:attr, , http://www.w3.org/2001/XMLSchema#string 
     19 
     20# SSL settings 
     21attributeQuery.sslCACertDir = $NDGSEC_TEST_CONFIG_DIR/ca 
     22attributeQuery.sslCertFilePath = $NDGSEC_TEST_CONFIG_DIR/pki/test.crt 
     23attributeQuery.sslPriKeyFilePath = $NDGSEC_TEST_CONFIG_DIR/pki/test.key 
     24attributeQuery.sslValidDNs = /O=Site A/CN=Attribute Authority, 
     25                                                         /C=UK/ST=Oxfordshire/O=BADC/OU=Security/CN=localhost 
  • TI12-security/trunk/python/ndg_security_test/ndg/security/test/unit/myproxy/certificate_extapp/test_saml_attribute_assertion.py

    r6051 r6052  
    1313import logging 
    1414logging.basicConfig(level=logging.DEBUG) 
     15 
    1516import os 
    1617from string import Template 
     
    2829class CertExtAppTestCase(BaseTestCase): 
    2930    THIS_DIR = os.path.dirname(__file__) 
    30     OPENID_TMPL = "https://openid.localhost/${userIdentifier}" 
    31     OPENID = Template(OPENID_TMPL).substitute( 
    32                         {'userIdentifier': BaseTestCase.OPENID_IDENTIFIER}) 
    33     OPENID_SQL_QUERY = ("select openid from users where username " 
    34                         "= '${username}'")  
    35     SITEA_SSL_ATTRIBUTEAUTHORITY_PORTNUM = 5443 
    36     SITEA_SSL_ATTRIBUTEAUTHORITY_URI = ('https://localhost:%d/AttributeAuthority' 
    37                                         '/saml' %  
    38                                         SITEA_SSL_ATTRIBUTEAUTHORITY_PORTNUM) 
     31    OPENID_SQL_QUERY = ("select openid from users where username = " 
     32                        "'${username}'")  
    3933    INI_FILEPATH = os.path.join(THIS_DIR, 'config.ini') 
    4034     
     
    4236        super(CertExtAppTestCase, self).__init__(*arg, **kw)             
    4337        self.startSiteAAttributeAuthority(withSSL=True,  
    44                     port=CertExtAppTestCase.SITEA_SSL_ATTRIBUTEAUTHORITY_PORTNUM) 
     38                port=CertExtAppTestCase.SITEA_SSL_ATTRIBUTEAUTHORITY_PORTNUM) 
    4539        self.initDb() 
    4640         
     
    5751    def test02AttributeQuery(self): 
    5852        myProxyCertExtApp = CertExtApp() 
    59         myProxyCertExtApp.attributeQuery.issuerDN = "/O=Site A/CN=Authorisation Service" 
    60         myProxyCertExtApp.attributeQuery.subjectID = CertExtAppTestCase.OPENID 
     53        myProxyCertExtApp.attributeQuery.issuerDN = \ 
     54                                        "/CN=Authorisation Service/O=Site A" 
     55        myProxyCertExtApp.attributeQuery.subjectID = \ 
     56                                        CertExtAppTestCase.OPENID_URI 
     57                                         
     58        myProxyCertExtApp.attributeQuery.sslCACertDir = \ 
     59                                                CertExtAppTestCase.CACERT_DIR 
     60        myProxyCertExtApp.attributeQuery.sslCertFilePath = \ 
     61                        os.path.join(CertExtAppTestCase.PKI_DIR, 'test.crt') 
     62        myProxyCertExtApp.attributeQuery.sslPriKeyFilePath = \ 
     63                        os.path.join(CertExtAppTestCase.PKI_DIR, 'test.key') 
     64        myProxyCertExtApp.attributeQuery.sslValidDNs = \ 
     65                                                CertExtAppTestCase.SSL_CERT_DN 
    6166                                 
    6267        response = myProxyCertExtApp.attributeQuery.send( 
    63                     uri=CertExtAppTestCase.SITEA_SSL_ATTRIBUTEAUTHORITY_URI) 
     68                uri=CertExtAppTestCase.SITEA_SSL_ATTRIBUTEAUTHORITY_SAML_URI) 
    6469        print(response) 
    6570         
     
    7580 
    7681        myProxyCertExtApp.attributeAuthorityURI = \ 
    77                             CertExtAppTestCase.SITEA_SSL_ATTRIBUTEAUTHORITY_URI 
     82                    CertExtAppTestCase.SITEA_SSL_ATTRIBUTEAUTHORITY_SAML_URI 
    7883        myProxyCertExtApp.attributeQuery.issuerDN = \ 
    79             "/O=Site A/CN=Authorisation Service" 
     84                            "/CN=Authorisation Service/O=Site A" 
     85                                         
     86        myProxyCertExtApp.attributeQuery.sslCACertDir = \ 
     87                                                CertExtAppTestCase.CACERT_DIR 
     88        myProxyCertExtApp.attributeQuery.sslCertFilePath = \ 
     89                        os.path.join(CertExtAppTestCase.PKI_DIR, 'test.crt') 
     90        myProxyCertExtApp.attributeQuery.sslPriKeyFilePath = \ 
     91                        os.path.join(CertExtAppTestCase.PKI_DIR, 'test.key') 
     92        myProxyCertExtApp.attributeQuery.sslValidDNs = \ 
     93                                                CertExtAppTestCase.SSL_CERT_DN 
    8094         
    8195        assertion = myProxyCertExtApp(CertExtAppTestCase.USERNAME) 
Note: See TracChangeset for help on using the changeset viewer.