Changeset 2136


Ignore:
Timestamp:
09/02/07 14:55:08 (12 years ago)
Author:
pjkersha
Message:

python/ndg.security.server/setup.py:

  • comment out Twisted from install - won't do egg install
  • updated long description

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

  • added verifyingCertFilePath keyword to SignatureHandler? initialisation
  • added SSL capability

python/conf/attAuthorityProperties.xml,
python/ndg.security.test/ndg/security/test/AttAuthority/siteAAttAuthorityProperties.xml,
python/ndg.security.test/ndg/security/test/AttAuthority/siteBAttAuthorityProperties.xml,
python/ndg.security.server/ndg/security/server/AttAuthority/init.py:
added element names for reading SSL settings from properties file.

python/ndg.security.server/ndg/security/server/SessionMgr/server-config.tac:
added verifyingCertFilePath keyword to SignatureHandler? initialisation

python/conf/sessionMgrProperties.xml,
python/ndg.security.test/ndg/security/test/SessionMgr/sessionMgrProperties.xml,
python/ndg.security.server/ndg/security/server/SessionMgr/init.py:
added clntCertFile properties file element name for setting certificate for
verifying incoming SOAP messages.

python/ndg.security.server/ndg/security/server/SessionMgr/Makefile:
corrected typo.

python/ndg.security.server/ndg/security/server/MyProxy.py:
Put OpenSSLConfig and OpenSSLConfigError classes into their own package
'openssl' so that they can also be used by the Certificate Authority client.

python/www/html/certificateAuthority.wsdl,
python/ndg.security.server/ndg/security/server/ca/CertificateAuthority_services_server.py,
python/ndg.security.common/ndg/security/common/ca/CertificateAuthority_services_types.py,
python/ndg.security.common/ndg/security/common/ca/CertificateAuthority_services.py: updated operations to issueCert, revokeCert and getCRL.

python/ndg.security.test/ndg/security/test/AttAuthority/attAuthorityClientTest.cfg: changed address of service to connect to.

python/ndg.security.test/ndg/security/test/SessionMgr/sessionMgrClientTest.cfg:
alternative username connection settings

python/ndg.security.common/ndg/security/common/AttAuthority/init.py:
fixed typos in error message and comments.

ython/ndg.security.common/ndg/security/common/XMLSec.py: changed call to
getAttributeNodeNS to getAttributeNode for retrieving reference element URI
attribute.

python/ndg.security.common/ndg/security/common/ca/init.py: code for
Certificate Authority client

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

  • tidied up imports
  • added properties for setting keywords to reference and SignedInfo? C14N
  • changed sign method so that it is truely configurable allow use of inclusive or exclusive C14N based on the keywords set for reference and SignedInfo? C14N calls.
  • swapped calls to getAttributeNodeNS with getAttributeNode where appropriate.

java/DEWS/AttAuthority/appClientModule/META-INF/ibm-webservicesclient-bnd.xmi,
java/DEWS/AttAuthority/build/classes/META-INF/ibm-webservicesclient-bnd.xmi:
updated to that request generator correctly places X.509 cert in
BinarySecurityToken? element.

java/DEWS/AttAuthority/appClientModule/Main.java,
java/DEWS/AttAuthority/appClientjava/DEWS/AttAuthority/appClientModule/META-INF/ibm-webservicesclient-bnd.xmiModule/Main.java:
include calls to getX509Cert and getAttCert methods.

java/DEWS/SessionMgr/build/classes/META-INF/ibm-webservicesclient-bnd.xmi,
java/DEWS/SessionMgr/appClientModule/META-INF/ibm-webservicesclient-bnd.xmi:
updates for testing Session MAnager client

java/DEWS/SessionMgr/appClientModule/Main.java: switched username setting.

Location:
TI12-security/trunk
Files:
2 added
23 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/java/DEWS/AttAuthority/appClientModule/META-INF/ibm-webservicesclient-bnd.xmi

    r2110 r2136  
    1818        </keyInfo> 
    1919        <keyLocator xmi:id="KeyLocator_1164988543937" name="gen_klocator" classname="com.ibm.wsspi.wssecurity.keyinfo.KeyStoreKeyLocator"> 
    20           <keyStore xmi:id="KeyStore_1164988543937" storepass="{xor}KzosKy8+LCwoMC07" path="/home/pjkersha/KeyStore/DEWS/Test/keystore.p12" type="PKCS12"/> 
     20          <keyStore xmi:id="KeyStore_1164988543937" storepass="{xor}KzosKy8+LCwoMC07" path="/home/pjkershaw/KeyStore/DEWS/Test/keystore.p12" type="PKCS12"/> 
    2121          <keys xmi:id="Key_1164988543937" alias="dti certificate" keypass="{xor}KzosKy8+LCwoMC07" name="CN=webSphereTest, OU=BADC, O=NDG"/> 
    2222        </keyLocator> 
     
    2525          <callbackHandler xmi:id="CallbackHandler_1164988543937" classname="com.ibm.wsspi.wssecurity.auth.callback.X509CallbackHandler"> 
    2626            <key xmi:id="Key_1164988543938" alias="dti certificate" keypass="{xor}KzosKy8+LCwoMC07" name="CN=webSphereTest, OU=BADC, O=NDG"/> 
    27             <keyStore xmi:id="KeyStore_1164988543938" storepass="{xor}KzosKy8+LCwoMC07" path="/home/pjkersha/KeyStore/DEWS/Test/keystore.p12" type="PKCS12"/> 
     27            <keyStore xmi:id="KeyStore_1164988543938" storepass="{xor}KzosKy8+LCwoMC07" path="/home/pjkershaw/KeyStore/DEWS/Test/keystore.p12" type="PKCS12"/> 
    2828            <basicAuth xmi:id="BasicAuth_1164988543937"/> 
    2929          </callbackHandler> 
  • TI12-security/trunk/java/DEWS/AttAuthority/appClientModule/Main.java

    r2110 r2136  
    3434 
    3535                         
     36                        ////////////////////////////////////////////////////////////////////////////////// 
     37                        // Call getAttCert operation 
     38                        ////////////////////////////////////////////////////////////////////////////////// 
     39                        System.out.println("Calling getAttCert ..."); 
     40                         
     41                        // Ignore this arg 
     42                        String userCert = ""; 
     43                         
     44                        // Input Attribute Certificate to be used to get a mapped Attribute Certificate. 
     45                        // Leave blank if making a request to an Attribute Authority where the user is  
     46                        // registered 
     47                        String userAttCert = ""; 
     48                         
     49                        // Attribute Certificate to be returned 
     50                        StringHolder attCertHolder = new StringHolder(); 
     51                         
     52                        // Contains info if access is denied 
     53                        StringHolder msgHolder = new StringHolder(); 
     54                         
     55                        port.getAttCert(userCert, userAttCert, attCertHolder, msgHolder); 
     56                        System.out.println("... done");                  
     57                        System.out.println("Service getAttCert returned: "); 
     58                        if (attCertHolder.value != null)  
     59                                System.out.println("  Attribute Certificate = " + attCertHolder.value); 
     60                         
     61                        if (msgHolder.value != null)  
     62                                System.out.println("  Access Error Message = " + msgHolder.value); 
     63                         
    3664                        //////////////////////////////////////////////////////////////////////////////////                       
    3765                        // End Web service call 
  • TI12-security/trunk/java/DEWS/SessionMgr/appClientModule/Main.java

    r2110 r2136  
    4848                         
    4949                        // Setup input args                      
    50                         String connectUsername = "gabriel"; 
     50                        String connectUsername = "sstljakTestUser"; 
    5151                        String connectPassword = args[1]; 
    5252                        boolean createServerSess = true; 
  • TI12-security/trunk/python/conf/attAuthorityProperties.xml

    r2051 r2136  
    11<?xml version="1.0" encoding="utf-8"?> 
    22<AAprop> 
    3     <name>BADC</name> 
     3        <!--  
     4        'name' setting MUST agree with map config file 'thisHost' name 
     5        attribute 
     6        --> 
     7    <name>BADC</name>  
    48    <portNum>5000</portNum> 
     9    <useSSL>Yes</useSSL> <!-- leave blank to use http --> 
     10    <sslCertFile></sslCertFile> 
     11    <sslKeyFile></sslKeyFile> 
     12    <!-- 
     13    PKI settings for signature of outbound SOAP messages 
     14    --> 
    515    <keyFile></keyFile> 
    616    <keyPwd></keyPwd> 
    717    <certFile></certFile> 
    818    <caCertFile></caCertFile> 
    9     <attCertLifetime></attCertLifetime> 
     19    <!--  
     20    Set the certificate used to verify the signature of messages from the  
     21    client.  This can usually be left blank since the client is expected to  
     22    include the cert with the signature in the inbound SOAP message 
     23    --> 
     24    <clntCertFile></clntCertFile>     
     25    <attCertLifetime></attCertLifetime> <!-- Measured in seconds --> 
     26        <!--  
     27        Allow an offset for clock skew between servers running  
     28        security services.  - Use minus sign for time in the past 
     29        --> 
    1030        <attCertNotBeforeOff>0</attCertNotBeforeOff> 
     31    <!-- Location of role mapping file --> 
     32    <mapConfigFile></mapConfigFile> 
     33    <!-- All Attribute Certificates are recorded in this dir before dispatch 
     34    to SOAP requestor 
     35    --> 
     36    <attCertDir></attCertDir> 
     37    <!--  
     38    File prefix and suffix for files stored in attCertDir  
     39    --> 
    1140    <attCertFilePfx>ac-</attCertFilePfx> 
    1241    <attCertFileSfx>.xml</attCertFileSfx> 
    13     <mapConfigFile></mapConfigFile> 
    14     <attCertDir></attCertDir> 
    1542    <dnSeparator>/</dnSeparator> 
     43    <!--  
     44    Settings for custom AAUserRoles derived class to get user roles for 
     45    given user ID 
     46    --> 
    1647    <userRolesModFilePath></userRolesModFilePath> 
    1748    <userRolesModName></userRolesModName> 
  • TI12-security/trunk/python/conf/sessionMgrProperties.xml

    r2063 r2136  
    11<?xml version="1.0" encoding="utf-8"?> 
    22<sessMgrProp> 
     3    <portNum></portNum> 
     4    <useSSL>Yes</useSSL> <!-- leave blank to use http --> 
     5    <sslCertFile></sslCertFile> 
     6    <sslKeyFile></sslKeyFile> 
    37    <caCertFile></caCertFile> 
    48    <certFile></certFile> 
     
    913    <sslKeyFile></sslKeyFile> 
    1014    <portNum></portNum> 
     15    <!--  
     16    Set the certificate used to verify the signature of messages from the  
     17    client.  This can usually be left blank since the client is expected to  
     18    include the cert with the signature in the inbound SOAP message 
     19    --> 
     20    <clntCertFile></clntCertFile>     
    1121    <sessMgrEncrKey></sessMgrEncrKey> 
    1222    <sessMgrURI></sessMgrURI> 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/AttAuthority/__init__.py

    r2087 r2136  
    228228        except Exception, e: 
    229229            raise AttAuthorityClientError, \ 
    230                                     "Rerieving host information: " + str(e) 
     230                                    "Retrieving host information: " + str(e) 
    231231         
    232232        hostInfo = {} 
     
    252252             
    253253        try:    
    254             # Pass encrypted request 
    255254            trustedHosts = self.__srv.getTrustedHostInfo(role) 
    256255 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/XMLSec.py

    r2076 r2136  
    621621         
    622622        # Check for reference URI set 
    623         refURIattrNode = refNode.getAttributeNodeNS(None, 'URI') 
     623        refURIattrNode = refNode.getAttributeNode('URI') 
    624624        if refURIattrNode and refURIattrNode.value: 
    625625            raise VerifyError, "Reference URI value is expected to be " + \ 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/ca/CertificateAuthority_services.py

    r2131 r2136  
    11##################################################  
    2 # simpleCA_services.py  
    3 # generated by ZSI.wsdl2python  
    4 #  
    5 #  
     2# CertificateAuthority_services.py  
     3# generated by ZSI.generate.wsdl2python 
    64################################################## 
    75 
    86 
     7from CertificateAuthority_services_types import * 
    98import urlparse, types 
    10 from ZSI.TCcompound import Struct 
     9from ZSI.TCcompound import ComplexType, Struct 
    1110from ZSI import client 
    1211import ZSI 
     12from ZSI.generate.pyclass import pyclass_type 
    1313 
    14 class simpleCAServiceInterface: 
    15     def getsimpleCA(self, portAddress=None, **kw): 
    16         raise NonImplementationError, "method not implemented" 
     14# Locator 
     15class CertificateAuthorityServiceLocator: 
     16    CertificateAuthority_address = "http://localhost:5001" 
     17    def getCertificateAuthorityAddress(self): 
     18        return CertificateAuthorityServiceLocator.CertificateAuthority_address 
     19    def getCertificateAuthority(self, url=None, **kw): 
     20        return CertificateAuthorityBindingSOAP(url or CertificateAuthorityServiceLocator.CertificateAuthority_address, **kw) 
    1721 
     22# Methods 
     23class CertificateAuthorityBindingSOAP: 
     24    def __init__(self, url, **kw): 
     25        kw.setdefault("readerclass", None) 
     26        kw.setdefault("writerclass", None) 
     27        # no resource properties 
     28        self.binding = client.Binding(url=url, **kw) 
     29        # no ws-addressing 
    1830 
    19 class simpleCAServiceLocator(simpleCAServiceInterface): 
    20     simpleCA_address = "http://127.0.0.1:5000/simpleCA.wsdl" 
    21     def getsimpleCAAddress(self): 
    22         return simpleCAServiceLocator.simpleCA_address 
     31    # op: <ZSI.wstools.WSDLTools.Message instance at 0x406a3f8c> 
     32    def issueCert(self, x509CertReq): 
    2333 
    24     def getsimpleCA(self, portAddress=None, **kw): 
    25         return simpleCABindingSOAP(portAddress or simpleCAServiceLocator.simpleCA_address, **kw) 
     34        request = issueCertInputMsg() 
     35        request._x509CertReq = x509CertReq 
    2636 
     37        kw = {} 
     38        # no input wsaction 
     39        self.binding.Send(None, None, request, soapaction="issueCert", **kw) 
     40        # no output wsaction 
     41        response = self.binding.Receive(issueCertOutputMsg.typecode) 
     42        x509Cert = response._x509Cert 
     43        return x509Cert 
    2744 
    28 class simpleCABindingSOAP: 
     45    # op: <ZSI.wstools.WSDLTools.Message instance at 0x406ab2cc> 
     46    def revokeCert(self, x509Cert): 
    2947 
    30     def __init__(self, addr, **kw): 
    31         netloc = (urlparse.urlparse(addr)[1]).split(":") + [80,] 
    32         if not kw.has_key("host"): 
    33             kw["host"] = netloc[0] 
    34         if not kw.has_key("port"): 
    35             kw["port"] = int(netloc[1]) 
    36         if not kw.has_key("url"): 
    37             kw["url"] =  urlparse.urlparse(addr)[2] 
    38         self.binding = client.Binding(**kw) 
     48        request = revokeCertInputMsg() 
     49        request._x509Cert = x509Cert 
    3950 
     51        kw = {} 
     52        # no input wsaction 
     53        self.binding.Send(None, None, request, soapaction="revokeCert", **kw) 
     54        # no output wsaction 
     55        response = self.binding.Receive(revokeCertOutputMsg.typecode) 
     56        return  
    4057 
    41     def reqCert(self, request): 
    42         """ 
    43         @param: request to reqCertRequest:: 
    44           _usrCertReq: str 
     58    # op: <ZSI.wstools.WSDLTools.Message instance at 0x406ab7ec> 
     59    def getCRL(self): 
    4560 
    46         @return: response from reqCertResponse:: 
    47           _errMsg: str 
    48           _usrCert: str 
    49         """ 
     61        request = getCRLInputMsg() 
    5062 
    51         if not isinstance(request, reqCertRequest) and\ 
    52             not issubclass(reqCertRequest, request.__class__): 
    53             raise TypeError, "%s incorrect request type" %(request.__class__) 
    5463        kw = {} 
    55         response = self.binding.Send(None, None, request, soapaction="urn:simpleCA#reqCert", **kw) 
    56         response = self.binding.Receive(reqCertResponseWrapper()) 
    57         if not isinstance(response, reqCertResponse) and\ 
    58             not issubclass(reqCertResponse, response.__class__): 
    59             raise TypeError, "%s incorrect response type" %(response.__class__) 
    60         return response 
     64        # no input wsaction 
     65        self.binding.Send(None, None, request, soapaction="getCRL", **kw) 
     66        # no output wsaction 
     67        response = self.binding.Receive(getCRLOutputMsg.typecode) 
     68        crl = response._crl 
     69        return crl 
    6170 
     71issueCertInputMsg = ns0.issueCert_Dec().pyclass 
    6272 
     73issueCertOutputMsg = ns0.issueCertResponse_Dec().pyclass 
    6374 
    64 class reqCertRequest (ZSI.TCcompound.Struct):  
    65     def __init__(self, name=None, ns=None): 
    66         self._usrCertReq = None 
     75revokeCertInputMsg = ns0.revokeCert_Dec().pyclass 
    6776 
    68         oname = None 
    69         if name: 
    70             oname = name 
    71             if ns: 
    72                 oname += ' xmlns="%s"' % ns 
    73             ZSI.TC.Struct.__init__(self, reqCertRequest, [ZSI.TC.String(pname="usrCertReq",aname="_usrCertReq",optional=1),], pname=name, aname="_%s" % name, oname=oname ) 
     77revokeCertOutputMsg = ns0.revokeCertResponse_Dec().pyclass 
    7478 
    75 class reqCertRequestWrapper(reqCertRequest): 
    76     """wrapper for rpc:encoded message""" 
     79getCRLInputMsg = ns0.getCRL_Dec().pyclass 
    7780 
    78     typecode = reqCertRequest(name='reqCert', ns='urn:simpleCA') 
    79     def __init__( self, name=None, ns=None, **kw ): 
    80         reqCertRequest.__init__( self, name='reqCert', ns='urn:simpleCA' ) 
    81  
    82 class reqCertResponse (ZSI.TCcompound.Struct):  
    83     def __init__(self, name=None, ns=None): 
    84         self._usrCert = None 
    85         self._errMsg = None 
    86  
    87         oname = None 
    88         if name: 
    89             oname = name 
    90             if ns: 
    91                 oname += ' xmlns="%s"' % ns 
    92             ZSI.TC.Struct.__init__(self, reqCertResponse, [ZSI.TC.String(pname="usrCert",aname="_usrCert",optional=1),ZSI.TC.String(pname="errMsg",aname="_errMsg",optional=1),], pname=name, aname="_%s" % name, oname=oname ) 
    93  
    94 class reqCertResponseWrapper(reqCertResponse): 
    95     """wrapper for rpc:encoded message""" 
    96  
    97     typecode = reqCertResponse(name='reqCertResponse', ns='urn:simpleCA') 
    98     def __init__( self, name=None, ns=None, **kw ): 
    99         reqCertResponse.__init__( self, name='reqCertResponse', ns='urn:simpleCA' ) 
     81getCRLOutputMsg = ns0.getCRLResponse_Dec().pyclass 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/ca/__init__.py

    r2058 r2136  
    1 """NERC Data Grid Project 
    2  
    3 @author P J Kershaw 27/10/06 
    4  
    5 @copyright (C) 2007 CCLRC & NERC 
    6  
    7 @license This software may be distributed under the terms of the Q Public 
     1#!/usr/bin/env python 
     2"""NDG Security Certificate Authority client - client interface classes to the 
     3Certificate Authority.   
     4 
     5NERC Data Grid Project 
     6 
     7@author P J Kershaw 17/11/06 
     8 
     9@copyright (C) 2006 CCLRC & NERC 
     10 
     11@license This software may be distributed under the terms of the Q Public  
    812License, version 1.0 or later. 
    913""" 
     14reposID = '$Id:$' 
     15 
     16__all__ = [ 
     17    'CertificateAuthority_services', 
     18    'CertificateAuthority_services_types', 
     19    ] 
     20 
     21# Handling for public key retrieval 
     22import tempfile 
     23from M2Crypto import X509, RSA, EVP 
     24 
     25from CertificateAuthority_services import CertificateAuthorityServiceLocator 
     26from ndg.security.common.wsSecurity import SignatureHandler 
     27from ndg.security.common.openssl import OpenSSLConfig 
     28 
     29 
     30#_____________________________________________________________________________ 
     31class CertificateAuthorityClientError(Exception): 
     32    """Exception handling for CertificateAuthorityClient class""" 
     33 
     34 
     35#_____________________________________________________________________________ 
     36class CertificateAuthorityClient(object): 
     37    """Client interface to Certificate Authority web service 
     38     
     39    @ctype _certReqDNparamName: tuple 
     40    @cvar _certReqDNparamName: names of parameters needed to generate a  
     41    certificate request e.g. CN, OU etc.""" 
     42 
     43    _certReqDNparamName = ('O', 'OU') 
     44     
     45    #_________________________________________________________________________ 
     46    def __init__(self, uri=None, tracefile=None, **signatureHandlerKw): 
     47        """ 
     48        @type uri: string 
     49        @keyword uri: URI for Attribute Authority WS.  Setting it will also 
     50        initialise the Service Proxy 
     51                                          
     52        @keyword tracefile: set to file object such as sys.stderr to give  
     53        extra WS debug information 
     54         
     55        @type **signatureHandlerKw: dict 
     56        @param **signatureHandlerKw: keywords for SignatureHandler class""" 
     57 
     58        self.__srv = None 
     59        self.__uri = None 
     60         
     61 
     62        # Set-up parameter names for certificate request 
     63        self.__certReqDNparam = {} 
     64 
     65         
     66        if uri: 
     67            self.__setURI(uri) 
     68 
     69        # WS-Security Signature handler 
     70        self.__signatureHandler = SignatureHandler(**signatureHandlerKw) 
     71            
     72        self.__tracefile = tracefile 
     73 
     74          
     75        # Instantiate Attribute Authority WS proxy 
     76        if self.__uri: 
     77            self.initService() 
     78         
     79 
     80    #_________________________________________________________________________ 
     81    def __setURI(self, uri): 
     82         
     83        if not isinstance(uri, basestring): 
     84            raise CertificateAuthorityClientError, \ 
     85                        "Attribute Authority WSDL URI must be a valid string" 
     86         
     87        self.__uri = uri 
     88         
     89    uri = property(fset=__setURI, doc="Set Attribute Authority WSDL URI") 
     90 
     91 
     92    #_________________________________________________________________________ 
     93    def __getSignatureHandler(self): 
     94        "Get SignatureHandler object property method" 
     95        return self.__signatureHandler 
     96     
     97    signatureHandler = property(fget=__getSignatureHandler, 
     98                                doc="SignatureHandler object") 
     99 
     100 
     101    #_________________________________________________________________________ 
     102    def __setSrvCertFilePath(self, srvCertFilePath): 
     103         
     104        if not isinstance(srvCertFilePath, basestring): 
     105            raise CertificateAuthorityClientError, \ 
     106                "Attribute Authority public key URI must be a valid string" 
     107         
     108        self.__srvCertFilePath = srvCertFilePath 
     109         
     110    srvCertFilePath = property(fset=__setSrvCertFilePath, 
     111                              doc="Set Attribute Authority public key URI") 
     112 
     113  
     114    #_________________________________________________________________________ 
     115    def __setClntCertFilePath(self, clntCertFilePath): 
     116         
     117        if not isinstance(clntCertFilePath, basestring): 
     118            raise CertificateAuthorityClientError, \ 
     119                "Client public key file path must be a valid string" 
     120         
     121        self.__clntCertFilePath = clntCertFilePath 
     122         
     123        try: 
     124            self.__clntCert = open(self.__clntCertFilePath).read() 
     125             
     126        except IOError, (errNo, errMsg): 
     127            raise CertificateAuthorityClientError, \ 
     128                    "Reading certificate file \"%s\": %s" % \ 
     129                    (self.__clntCertFilePath, errMsg) 
     130                                
     131        except Exception, e: 
     132            raise CertificateAuthorityClientError, \ 
     133                                    "Reading certificate file \"%s\": %s" % \ 
     134                                    (self.__clntCertFilePath, str(e)) 
     135         
     136    clntCertFilePath = property(fset=__setClntCertFilePath, 
     137                                doc="File path for client public key") 
     138 
     139  
     140    #_________________________________________________________________________ 
     141    def __setClntPriKeyFilePath(self, clntPriKeyFilePath): 
     142         
     143        if not isinstance(clntPriKeyFilePath, basestring): 
     144            raise CertificateAuthorityClientError(\ 
     145                "Client public key file path must be a valid string") 
     146         
     147        self.__clntPriKeyFilePath = clntPriKeyFilePath 
     148         
     149    clntPriKeyFilePath = property(fset=__setClntPriKeyFilePath, 
     150                                  doc="File path for client private key") 
     151 
     152  
     153    #_________________________________________________________________________ 
     154    def __setClntPriKeyPwd(self, clntPriKeyPwd): 
     155         
     156        if not isinstance(clntPriKeyPwd, basestring): 
     157            raise SessionMgrClientError, \ 
     158                        "Client private key password must be a valid string" 
     159         
     160        self.__clntPriKeyPwd = clntPriKeyPwd 
     161         
     162    clntPriKeyPwd = property(fset=__setClntPriKeyPwd, 
     163                         doc="Password protecting client private key file") 
     164 
     165 
     166    #_________________________________________________________________________         
     167    def __setCertReqDNparam(self, dict): 
     168        '''certReqDNparam property set method - forces setting of certificate  
     169        request parameter names to valid values 
     170         
     171        @param dict: dictionary of parameters''' 
     172         
     173        invalidKw = [k for k in dict \ 
     174                     if k not in self.__class__._certReqDNparamName] 
     175        if invalidKw: 
     176            raise CertificateAuthorityClientError, \ 
     177    "Invalid certificate request keyword(s): %s.  Valid keywords are: %s" % \ 
     178    (', '.join(invalidKw), ', '.join(self.__class__._certReqDNparamName)) 
     179     
     180        self.__certReqDNparam.update(dict) 
     181 
     182 
     183    #_________________________________________________________________________         
     184    def __getCertReqDNparam(self): 
     185        """certReqDNparam property set method - for Certificate request  
     186        parameters dict""" 
     187        return self.__certReqDNparam 
     188     
     189     
     190    certReqDNparam = property(fset=__setCertReqDNparam, 
     191                            fget=__getCertReqDNparam, 
     192                            doc="Dictionary of parameters for cert. request") 
     193 
     194         
     195    #_________________________________________________________________________ 
     196    def initService(self, uri=None): 
     197        """Set the WS proxy for the Attribute Authority 
     198         
     199        @type uri: string 
     200        @param uri: URI for service to invoke""" 
     201         
     202        if uri: 
     203            self.__setURI(uri) 
     204 
     205        # WS-Security Signature handler object is passed to binding 
     206        try: 
     207            locator = CertificateAuthorityServiceLocator() 
     208            self.__srv = locator.getCertificateAuthority(self.__uri,  
     209                                         sig_handler=self.__signatureHandler, 
     210                                         tracefile=self.__tracefile) 
     211        except HTTPResponse, e: 
     212            raise CertificateAuthorityClientError, \ 
     213                "Error initialising WSDL Service for \"%s\": %s %s" % \ 
     214                (self.__uri, e.status, e.reason) 
     215             
     216        except Exception, e: 
     217            raise CertificateAuthorityClientError, \ 
     218                "Initialising WSDL Service for \"%s\": %s" % \ 
     219                 (self.__uri, str(e)) 
     220                  
     221                  
     222    #_________________________________________________________________________         
     223    def _createCertReq(self, CN, nBitsForKey=1024, messageDigest="md5"): 
     224        """ 
     225        Create a certificate request. 
     226         
     227        @param CN: Common Name for certificate - effectively the same as the 
     228        username for the MyProxy credential 
     229        @param nBitsForKey: number of bits for private key generation -  
     230        default is 1024 
     231        @param messageDigest: message disgest type - default is MD5 
     232        @return tuple of certificate request PEM text and private key PEM text 
     233        """ 
     234         
     235        # Check all required certifcate request DN parameters are set                 
     236        # Create certificate request 
     237        req = X509.Request() 
     238     
     239        # Generate keys 
     240        key = RSA.gen_key(nBitsForKey, m2.RSA_F4) 
     241     
     242        # Create public key object 
     243        pubKey = EVP.PKey() 
     244        pubKey.assign_rsa(key) 
     245         
     246        # Add the public key to the request 
     247        req.set_version(0) 
     248        req.set_pubkey(pubKey) 
     249         
     250        if self.__certReqDNparam: 
     251            certReqDNparam = self.__certReqDNparam 
     252        else: 
     253            defaultReqDN = self.__openSSLConf.getReqDN() 
     254             
     255            certReqDNparam = {} 
     256            certReqDNparam['O'] = defaultReqDN['0.organizationName'] 
     257            certReqDNparam['OU'] = defaultReqDN['0.organizationalUnitName'] 
     258             
     259        # Set DN 
     260        x509Name = X509.X509_Name() 
     261        x509Name.CN = CN 
     262        x509Name.OU = certReqDNparam['OU'] 
     263        x509Name.O = certReqDNparam['O'] 
     264        req.set_subject_name(x509Name) 
     265         
     266        req.sign(pubKey, messageDigest) 
     267         
     268        return (req.as_pem(), key.as_pem(cipher=None)) 
     269     
     270                                     
     271    #_________________________________________________________________________ 
     272    def signCert(self,  
     273                 certReq=None,  
     274                 CN=None,  
     275                 opensslConfigFilePath=None, 
     276                 **createCertReqKw): 
     277        """Send a certificate request to the CA for signing 
     278         
     279        signCert([certReq=cr]|[CN=cn, opensslConfigFilePath=p, **kw]) 
     280         
     281        @type certReq: M2Crypto.X509.Request 
     282        @keyword certReq: X.509 certificate request.  If omitted, 
     283        _createCertReq method is called to create a new public and private  
     284        key and a certificate request 
     285         
     286        @type CN: string 
     287        @keyword CN: common name component of Distinguished Name for new 
     288        cert.  This keyword is ignored if certReq keyword is set. 
     289         
     290        @type opensslConfigFilePath: string 
     291        @keyword opensslConfigFilePath: file path for OpenSSL configuration 
     292        file from which to get settings for Distinguished Name for new  
     293        certificate.  This keyword is ignored if certReq keyword is set. 
     294        @rtype: tuple 
     295        @return: signed certificate and private key.  Private key will be  
     296        None if certReq keyword was passed in 
     297        """ 
     298 
     299        priKey = None 
     300        if not certReq: 
     301            # Create the certificate request 
     302            certReq, priKey = self._createCertReq(CN, **createCertReqKw) 
     303         
     304        try:    
     305            cert = self.__srv.signCert(certReq.as_pem()) 
     306 
     307        except Exception, e: 
     308            raise CertificateAuthorityClientError, \ 
     309                                            "Signing Certificate: " + str(e)       
     310        return cert, priKey 
     311 
     312                                     
     313    #_________________________________________________________________________ 
     314    def revokeCert(self, x509Cert): 
     315        """Request that the CA revoke the given certificate 
     316         
     317        @type x509Cert: string 
     318        @param x509Cert: X.509 certificate to be revoked""" 
     319             
     320        try:    
     321            self.__srv.revokeCert(x509Cert) 
     322 
     323        except Exception, e: 
     324            raise CertificateAuthorityClientError, \ 
     325                                            "Revoking certificate: " + str(e) 
     326     
     327 
     328    #_________________________________________________________________________ 
     329    def getCRL(self): 
     330        """Request Certificate Revocation List (CRL) for the CA 
     331         
     332        @rtype string 
     333        @return PEM encoded CRL""" 
     334 
     335        try:  
     336            crl = self.__srv.getCRL()   
     337             
     338        except Exception, e: 
     339            raise CertificateAuthorityClientError, "Requesting CRL: " + str(e) 
     340 
     341        return crl 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/wsSecurity.py

    r2108 r2136  
    1313""" 
    1414 
    15 reposID = '$Id$' 
     15reposID = '$Id:$' 
    1616 
    1717import re 
     
    3333from ZSI.generate.pyclass import pyclass_type 
    3434 
    35 from ZSI.wstools.Utility import DOMException, SplitQName 
     35from ZSI.wstools.Utility import DOMException 
    3636from ZSI.wstools.Utility import NamespaceError, MessageInterface, ElementProxy 
    37  
    38 # XML Parsing 
    39 from cStringIO import StringIO 
    40 from Ft.Xml.Domlette import NonvalidatingReaderBase, NonvalidatingReader 
    41 from Ft.Xml import XPath 
    4237 
    4338# Canonicalization 
    4439from ZSI.wstools.c14n import Canonicalize 
     40 
    4541from xml.dom import Node 
    4642from xml.xpath.Context import Context 
     
    112108                 signingPriKey=None, 
    113109                 signingPriKeyFilePath=None,  
    114                  signingPriKeyPwd=None): 
    115   
     110                 signingPriKeyPwd=None, 
     111                 refC14nKw={'unsuppressedPrefixes': ['xmlns',  
     112                                                  'xsi',  
     113                                                  'xsd',  
     114                                                  'SOAP-ENV',  
     115                                                  'wsu',  
     116                                                  'wsse',  
     117                                                  'ns1']}, 
     118                # Added 'ec' to list P J Kershaw 01/02/07 
     119                signedInfoC14nKw = {'unsuppressedPrefixes': ['xsi',  
     120                                                             'xsd',  
     121                                                             'SOAP-ENV',  
     122                                                             'ds',  
     123                                                             'wsse',  
     124                                                             'ec']}): 
     125 
     126        # Set keywords for canonicalization of SignedInfo and reference  
     127        # elements 
     128        self.__setRefC14nKw(refC14nKw) 
     129        self.__setSignedInfoC14nKw(signedInfoC14nKw) 
     130             
     131 
    116132        self.__setVerifyingCert(verifyingCert) 
    117133        self.__setVerifyingCertFilePath(verifyingCertFilePath) 
     
    131147         
    132148 
     149    #_________________________________________________________________________ 
     150    def __checkC14nKw(self, Kw): 
     151        """Check keywords for canonicalization in signing process - generic 
     152        method for setting keywords for reference element and SignedInfo 
     153        element c14n""" 
     154         
     155        # Check for dict/None - Set to None in order to use inclusive  
     156        # canonicalization 
     157        if Kw is not None and not isinstance(Kw, dict): 
     158            # Otherwise keywords must be a dictionary 
     159            raise AttributeError, \ 
     160                "Expecting dictionary type for reference c14n keywords" 
     161                 
     162        elif Kw.get('unsuppressedPrefixes') and \ 
     163             not isinstance(Kw['unsuppressedPrefixes'], list) and \ 
     164             not isinstance(Kw['unsuppressedPrefixes'], tuple): 
     165            raise AttributeError, \ 
     166                'Expecting list or tuple of prefix names for "%s" keyword' % \ 
     167                'unsuppressedPrefixes' 
     168         
     169                 
     170    #_________________________________________________________________________ 
     171    def __setRefC14nKw(self, Kw): 
     172        """Set keywords for canonicalization of reference elements in the  
     173        signing process""" 
     174        self.__checkC14nKw(Kw)                     
     175        self.__refC14nKw = Kw 
     176         
     177    refC14nKw = property(fset=__setRefC14nKw, 
     178                         doc="Keywords for c14n of reference elements") 
     179         
     180                 
     181    #_________________________________________________________________________ 
     182    def __setSignedInfoC14nKw(self, Kw): 
     183        """Set keywords for canonicalization of SignedInfo element in the  
     184        signing process""" 
     185        self.__checkC14nKw(Kw)                     
     186        self.__signedInfoC14nKw = Kw 
     187         
     188    signedInfoC14nKw = property(fset=__setSignedInfoC14nKw, 
     189                                doc="Keywords for c14n of SignedInfo element") 
     190 
     191 
     192    #_________________________________________________________________________ 
     193    def __refC14nIsExcl(self): 
     194        return isinstance(self.__refC14nKw, dict) and \ 
     195               self.__refC14nKw.get('unsuppressedPrefixes') and \ 
     196               len(self.__refC14nKw['unsuppressedPrefixes']) > 0 
     197                
     198    refC14nIsExcl = property(fget=__refC14nIsExcl, 
     199    doc="Return True/False c14n for reference elements set to exclusive type") 
     200      
     201 
     202    #_________________________________________________________________________ 
     203    def __signedInfoC14nIsExcl(self): 
     204        return isinstance(self.__signedInfoC14nKw, dict) and \ 
     205               self.__signedInfoC14nKw.get('unsuppressedPrefixes') and \ 
     206               len(self.__signedInfoC14nKw['unsuppressedPrefixes']) > 0 
     207                
     208    signedInfoC14nIsExcl = property(fget=__signedInfoC14nIsExcl, 
     209    doc="Return True/False c14n for SignedInfo element set to exclusive type") 
     210     
     211     
    133212    #_________________________________________________________________________ 
    134213    def __setCert(self, cert): 
     
    307386    def sign(self, soapWriter): 
    308387        '''Sign the message body and binary security token of a SOAP message 
     388         
     389        @type soapWriter: ZSI.writer.SoapWriter 
     390        @param soapWriter: ZSI object to write SOAP message 
    309391        ''' 
    310          
    311         # Add X.509 cert as binary security token 
    312         x509CertStr = self.__class__.__x509CertPat.findall(\ 
    313                                            self.__signingCert.toString())[0] 
    314  
    315         soapWriter._header.setNamespaceAttribute('wsse', OASIS.WSSE) 
    316         soapWriter._header.setNamespaceAttribute('wsu', _WSU.UTILITY) 
    317         soapWriter._header.setNamespaceAttribute('ds', DSIG.BASE) 
    318         soapWriter._header.setNamespaceAttribute('ec', DSIG.C14N_EXCL) 
    319          
    320         # TODO: Put in a check to make sure <wsse:security> isn't already  
    321         # present in header 
    322         wsseElem = soapWriter._header.createAppendElement(OASIS.WSSE,  
    323                                                          'Security') 
    324         wsseElem.setNamespaceAttribute('wsse', OASIS.WSSE) 
    325         wsseElem.node.setAttribute('SOAP-ENV:mustUnderstand', "1") 
    326          
    327         binSecTokElem = wsseElem.createAppendElement(OASIS.WSSE,  
    328                                                      'BinarySecurityToken') 
    329          
    330         # Change value and encoding types to suite WebSphere 
    331 #        binSecTokElem.node.setAttribute('ValueType', "wsse:X509v3") 
    332         valueType = \ 
    333 "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509" 
    334         binSecTokElem.node.setAttribute('ValueType', valueType) 
    335 #        binSecTokElem.node.setAttribute('EncodingType', "wsse:Base64Binary") 
    336         encodingType = \ 
    337 "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" 
    338         binSecTokElem.node.setAttribute('EncodingType', encodingType) 
    339          
    340         # Add ID so that the binary token can be included in the signature 
    341         binSecTokElem.node.setAttribute('wsu:Id', "binaryToken") 
    342  
    343         binSecTokElem.createAppendTextNode(x509CertStr) 
    344  
    345          
    346         # Signature 
    347         signatureElem = wsseElem.createAppendElement(DSIG.BASE, 'Signature') 
    348         signatureElem.setNamespaceAttribute('ds', DSIG.BASE) 
    349          
    350         # Signature - Signed Info 
    351         signedInfoElem = signatureElem.createAppendElement(DSIG.BASE,  
    352                                                            'SignedInfo') 
    353          
    354         # Signed Info - Canonicalization method 
    355         # 
    356         # Added 'ec' to list P J Kershaw 01/02/07 
    357         signedInfoC14nKw = {} 
    358         signedInfoC14nKw['unsuppressedPrefixes'] = \ 
    359             ['xsi', 'xsd', 'SOAP-ENV', 'ds', 'wsse', 'ec'] 
    360         c14nMethodElem = signedInfoElem.createAppendElement(DSIG.BASE, 
    361                                                     'CanonicalizationMethod') 
    362         c14nMethodElem.node.setAttribute('Algorithm', DSIG.C14N_EXCL) 
    363         c14nInclNamespacesElem = c14nMethodElem.createAppendElement(\ 
    364                                                     DSIG.C14N_EXCL, 
    365                                                     'InclusiveNamespaces') 
    366         c14nInclNamespacesElem.node.setAttribute('PrefixList',  
    367                         ' '.join(signedInfoC14nKw['unsuppressedPrefixes'])) 
    368          
    369         # Signed Info - Signature method 
    370         sigMethodElem = signedInfoElem.createAppendElement(DSIG.BASE, 
    371                                                     'SignatureMethod') 
    372         #sigMethodElem.node.setAttribute('Algorithm', DSIG.DIGEST_SHA1) 
    373         sigMethodElem.node.setAttribute('Algorithm', DSIG.SIG_RSA_SHA1) 
    374          
    375         # Signature - Signature value 
    376         signatureValueElem = signatureElem.createAppendElement(DSIG.BASE,  
    377                                                              'SignatureValue') 
    378          
    379         # Key Info 
    380         KeyInfoElem = signatureElem.createAppendElement(DSIG.BASE, 'KeyInfo') 
    381         secTokRefElem = KeyInfoElem.createAppendElement(OASIS.WSSE,  
    382                                                   'SecurityTokenReference') 
    383          
    384         # Reference back to the binary token included earlier 
    385         wsseRefElem = secTokRefElem.createAppendElement(OASIS.WSSE,  
    386                                                         'Reference') 
    387         wsseRefElem.node.setAttribute('URI', "#binaryToken") 
    388          
    389         # Add Reference to body so that it can be included in the signature 
    390         soapWriter.body.node.setAttribute('wsu:Id', "body") 
    391         soapWriter.body.node.setAttribute('xmlns:wsu', _WSU.UTILITY) 
    392  
    393         # Serialize and re-parse prior to reference generation - calculating 
    394         # canonicalization based on soapWriter.dom.node seems to give an 
    395         # error: the order of wsu:Id attribute is not correct 
    396         docNode = Reader().fromString(str(soapWriter)) 
    397392         
    398393        # Namespaces for XPath searches 
     
    404399            'soapenv':"http://schemas.xmlsoap.org/soap/envelope/"  
    405400        } 
     401 
     402        # Add X.509 cert as binary security token stripping BEGIN CERT and 
     403        # END CERT delimiters 
     404        x509CertStr = self.__class__.__x509CertPat.findall(\ 
     405                                           self.__signingCert.toString())[0] 
     406 
     407        soapWriter._header.setNamespaceAttribute('wsse', OASIS.WSSE) 
     408        soapWriter._header.setNamespaceAttribute('wsu', _WSU.UTILITY) 
     409        soapWriter._header.setNamespaceAttribute('ds', DSIG.BASE) 
     410         
     411        if self.refC14nIsExcl or self.signedInfoC14nIsExcl: 
     412            soapWriter._header.setNamespaceAttribute('ec', DSIG.C14N_EXCL) 
     413         
     414        # Check <wsse:security> isn't already present in header 
     415        ctxt = Context(soapWriter.dom.node, processorNss=processorNss) 
     416        wsseNodes = xpath.Evaluate('//wsse:security',  
     417                                   contextNode=soapWriter.dom.node,  
     418                                   context=ctxt) 
     419        if len(wsseNodes) > 1: 
     420            raise SignatureError, 'wsse:Security element is already present' 
     421 
     422        # Add WSSE element 
     423        wsseElem = soapWriter._header.createAppendElement(OASIS.WSSE,  
     424                                                         'Security') 
     425        wsseElem.setNamespaceAttribute('wsse', OASIS.WSSE) 
     426         
     427        # Recipient MUST parse and check this signature  
     428        wsseElem.node.setAttribute('SOAP-ENV:mustUnderstand', "1") 
     429         
     430        # Binary Security Token element will contain the X.509 cert  
     431        # corresponding to the private key used to sing the message 
     432        binSecTokElem = wsseElem.createAppendElement(OASIS.WSSE,  
     433                                                     'BinarySecurityToken') 
     434         
     435        # Value and encoding types to suite WebSphere WSSE implementation 
     436        valueType = \ 
     437"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509" 
     438        binSecTokElem.node.setAttribute('ValueType', valueType) 
     439 
     440        encodingType = \ 
     441"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" 
     442        binSecTokElem.node.setAttribute('EncodingType', encodingType) 
     443         
     444        # Add ID so that the binary token can be included in the signature 
     445        binSecTokElem.node.setAttribute('wsu:Id', "binaryToken") 
     446 
     447        binSecTokElem.createAppendTextNode(x509CertStr) 
     448 
     449         
     450        # Signature 
     451        signatureElem = wsseElem.createAppendElement(DSIG.BASE, 'Signature') 
     452        signatureElem.setNamespaceAttribute('ds', DSIG.BASE) 
     453         
     454        # Signature - Signed Info 
     455        signedInfoElem = signatureElem.createAppendElement(DSIG.BASE,  
     456                                                           'SignedInfo') 
     457         
     458        # Signed Info - Canonicalization method 
     459        c14nMethodElem = signedInfoElem.createAppendElement(DSIG.BASE, 
     460                                                    'CanonicalizationMethod') 
     461         
     462        # Set based on 'signedInfoIsExcl' property 
     463        c14nAlgOpt = (DSIG.C14N, DSIG.C14N_EXCL) 
     464        signedInfoC14nAlg = c14nAlgOpt[self.signedInfoC14nIsExcl] 
     465         
     466        c14nMethodElem.node.setAttribute('Algorithm', signedInfoC14nAlg) 
     467         
     468        if self.signedInfoC14nIsExcl: 
     469            c14nInclNamespacesElem = c14nMethodElem.createAppendElement(\ 
     470                                                    signedInfoC14nAlg, 
     471                                                    'InclusiveNamespaces') 
     472            c14nInclNamespacesElem.node.setAttribute('PrefixList',  
     473                            ' '.join(self.__signedInfoC14nKw['unsuppressedPrefixes'])) 
     474         
     475        # Signed Info - Signature method 
     476        sigMethodElem = signedInfoElem.createAppendElement(DSIG.BASE, 
     477                                                    'SignatureMethod') 
     478        sigMethodElem.node.setAttribute('Algorithm', DSIG.SIG_RSA_SHA1) 
     479         
     480        # Signature - Signature value 
     481        signatureValueElem = signatureElem.createAppendElement(DSIG.BASE,  
     482                                                             'SignatureValue') 
     483         
     484        # Key Info 
     485        KeyInfoElem = signatureElem.createAppendElement(DSIG.BASE, 'KeyInfo') 
     486        secTokRefElem = KeyInfoElem.createAppendElement(OASIS.WSSE,  
     487                                                  'SecurityTokenReference') 
     488         
     489        # Reference back to the binary token included earlier 
     490        wsseRefElem = secTokRefElem.createAppendElement(OASIS.WSSE,  
     491                                                        'Reference') 
     492        wsseRefElem.node.setAttribute('URI', "#binaryToken") 
     493         
     494        # Add Reference to body so that it can be included in the signature 
     495        soapWriter.body.node.setAttribute('wsu:Id', "body") 
     496        soapWriter.body.node.setAttribute('xmlns:wsu', _WSU.UTILITY) 
     497 
     498        # Serialize and re-parse prior to reference generation - calculating 
     499        # canonicalization based on soapWriter.dom.node seems to give an 
     500        # error: the order of wsu:Id attribute is not correct 
     501        docNode = Reader().fromString(str(soapWriter)) 
    406502        ctxt = Context(docNode, processorNss=processorNss) 
    407         idNodes = xpath.Evaluate('//*[@wsu:Id]',  
    408                                  contextNode=docNode,  
    409                                  context=ctxt) 
    410          
    411         # Leave out token 
    412         #idNodes = [idNodes[1]] 
    413  
     503        refNodes = xpath.Evaluate('//*[@wsu:Id]',  
     504                                  contextNode=docNode,  
     505                                  context=ctxt) 
     506         
     507        # Set based on 'signedInfoIsExcl' property 
     508        refC14nAlg = c14nAlgOpt[self.refC14nIsExcl] 
     509         
    414510        # 1) Reference Generation 
    415511        # 
    416512        # Find references 
    417         c14nKw = {} 
    418         c14nKw['unsuppressedPrefixes'] = ['xmlns', 'xsi', 'xsd', 'SOAP-ENV', 'wsu', 'wsse', 'ns1'] 
    419         for idNode in idNodes: 
     513        for refNode in refNodes: 
    420514             
    421515            # Set URI attribute to point to reference to be signed 
    422             #uri = u"#" + idNode.getAttribute('wsu:Id') 
    423             uri = u"#" + idNode.attributes[(_WSU.UTILITY, 'Id')].value 
     516            #uri = u"#" + refNode.getAttribute('wsu:Id') 
     517            uri = u"#" + refNode.attributes[(_WSU.UTILITY, 'Id')].value 
    424518             
    425519            # Canonicalize reference 
    426             c14nRef = Canonicalize(idNode, **c14nKw) 
     520            refC14n = Canonicalize(refNode, **self.__refC14nKw) 
    427521             
    428522            # Calculate digest for reference and base 64 encode 
    429523            # 
    430524            # Nb. encodestring adds a trailing newline char 
    431             digestValue = base64.encodestring(sha(c14nRef).digest()).strip() 
     525            digestValue = base64.encodestring(sha(refC14n).digest()).strip() 
    432526 
    433527 
     
    442536            transformElem = transformsElem.createAppendElement(DSIG.BASE,  
    443537                                                               'Transform') 
    444 #            transformElem.node.setAttribute('Algorithm', DSIG.C14N) 
    445             transformElem.node.setAttribute('Algorithm', DSIG.C14N_EXCL) 
    446  
    447             inclNamespacesElem = transformElem.createAppendElement(\ 
    448                                                         DSIG.C14N_EXCL, 
     538 
     539            # Set Canonicalization algorithm type 
     540            transformElem.node.setAttribute('Algorithm', refC14nAlg) 
     541            if self.refC14nIsExcl: 
     542                # Exclusive C14N requires inclusive namespace elements 
     543                inclNamespacesElem = transformElem.createAppendElement(\ 
     544                                                                                   refC14nAlg, 
    449545                                                       'InclusiveNamespaces') 
    450             inclNamespacesElem.node.setAttribute('PrefixList', 
    451                                 ' '.join(c14nKw['unsuppressedPrefixes'])) 
     546                inclNamespacesElem.node.setAttribute('PrefixList', 
     547                                        ' '.join(self.__refC14nKw['unsuppressedPrefixes'])) 
    452548             
    453549            # Digest Method  
     
    463559    
    464560        # 2) Signature Generation 
    465         # 
    466  
    467         # Test against signature generated by pyXMLSec version 
    468         #xmlTxt = open('./wsseSign-xmlsec-res.xml').read() 
    469         #dom = NonvalidatingReader.parseStream(StringIO(xmlTxt)) 
    470          
     561        #         
    471562        # Canonicalize the signedInfo node 
    472         # 
    473         # Nb. When extracted the code adds the namespace attribute to the 
    474         # signedInfo!  This has important consequences for validation - 
    475         # 
    476         # 1) Do you strip the namespace attribute before taking the digest to  
    477         # ensure the text is exactly the same as what is displayed in the  
    478         # message? 
    479         # 
    480         # 2) Leave it in and assume the validation algorithm will expect to  
    481         # add in the namespace attribute?! 
    482         # 
    483         # http://www.w3.org/TR/xml-c14n#NoNSPrefixRewriting implies you need  
    484         # to include namespace declarations for namespaces referenced in a doc 
    485         # subset - yes to 2) 
    486         #c14nSignedInfo = signedInfoElem.canonicalize() 
    487         c14nSignedInfo = Canonicalize(signedInfoElem.node, **signedInfoC14nKw) 
     563        c14nSignedInfo = Canonicalize(signedInfoElem.node,  
     564                                      **self.__signedInfoC14nKw) 
    488565 
    489566        # Calculate digest of SignedInfo 
     
    496573        # Add to <SignatureValue> 
    497574        signatureValueElem.createAppendTextNode(b64EncSignatureValue) 
    498          
    499 #        # Extract RSA public key from the cert 
    500 #        rsaPubKey = self.__signingCert.m2CryptoX509.get_pubkey().get_rsa() 
    501          
    502         # Check the signature  
    503 #        verify = bool(rsaPubKey.verify(signedInfoDigestValue, signatureValue)) 
    504 #         
    505 #        open('soap.xml', 'w').write(str(soapWriter)) 
    506 #        import pdb;pdb.set_trace()  
    507 #        print "Signature Generated" 
    508 #        print str(soapWriter) 
    509575 
    510576 
    511577    def verify(self, parsedSOAP): 
    512         """Verify signature""" 
    513  
     578        """Verify signature 
     579         
     580        @type parsedSOAP: ZSI.parse.ParsedSoap 
     581        @param parsedSOAP: object contain parsed SOAP message received from 
     582        sender""" 
     583         
    514584        processorNss = \ 
    515585        { 
     
    549619                                  contextNode=parsedSOAP.dom,  
    550620                                  context=ctxt) 
    551             
     621 
    552622        for refNode in refNodes: 
    553623            # Get the URI for the reference 
    554             refURI = refNode.getAttributeNodeNS(None, 'URI').value 
    555                              
     624            refURI = refNode.getAttributeNode('URI').value 
     625                          
    556626            try: 
    557627                transformsNode = getElements(refNode, "Transforms")[0] 
    558628                transforms = getElements(transformsNode, "Transform") 
    559629     
    560                 refAlgorithm = transforms[0].getAttributeNodeNS(None,  
    561                                                          "Algorithm").value 
     630                refAlgorithm = \ 
     631                            transforms[0].getAttributeNode("Algorithm").value 
    562632            except Exception, e: 
    563633                raise VerifyError, \ 
     
    566636                 
    567637            # Add extra keyword for Exclusive canonicalization method 
    568             c14nKw = {} 
     638            refC14nKw = {} 
    569639            if refAlgorithm == DSIG.C14N_EXCL: 
    570640                try: 
     
    572642                                              "InclusiveNamespaces") 
    573643                     
    574                     pfxListAttNode = inclusiveNS[0].getAttributeNodeNS(None,  
    575                                                                'PrefixList') 
    576                     c14nKw['unsuppressedPrefixes'] = \ 
     644                    pfxListAttNode = \ 
     645                                inclusiveNS[0].getAttributeNode('PrefixList') 
     646                             
     647                    refC14nKw['unsuppressedPrefixes'] = \ 
    577648                                                pfxListAttNode.value.split() 
    578649                except: 
     
    592663                                     context=ctxt)[0] 
    593664 
    594             c14nRef = Canonicalize(uriNode, **c14nKw) 
    595             digestValue = base64.encodestring(sha(c14nRef).digest()).strip() 
     665            refC14n = Canonicalize(uriNode, **refC14nKw) 
     666            digestValue = base64.encodestring(sha(refC14n).digest()).strip() 
    596667             
    597668            # Extract the digest value that was stored             
     
    612683        # element.  Nb. This is NOT necessarily the same as that used to 
    613684        # canonicalize the reference elements checked above! 
    614         signedInfoC14nAlg = c14nMethodNode.getAttributeNodeNS(None,  
    615                                                          "Algorithm").value 
     685        signedInfoC14nAlg = c14nMethodNode.getAttributeNode("Algorithm").value 
    616686        signedInfoC14nKw = {} 
    617687        if signedInfoC14nAlg == DSIG.C14N_EXCL: 
     
    620690                                          "InclusiveNamespaces") 
    621691                 
    622                 pfxListAttNode = inclusiveNS[0].getAttributeNodeNS(None,  
    623                                                            'PrefixList') 
     692                pfxListAttNode = inclusiveNS[0].getAttributeNode('PrefixList') 
    624693                signedInfoC14nKw['unsuppressedPrefixes'] = \ 
    625                                             pfxListAttNode.value.split() 
     694                                                pfxListAttNode.value.split() 
    626695                                                       
    627696            except Exception, e: 
     
    659728            pass  
    660729         
    661         import pdb;pdb.set_trace()         
     730        #import pdb;pdb.set_trace()         
    662731        if binSecTokNode: 
    663732            try: 
    664                 b64EncX509Cert = self.__class__.__beginCert + \ 
    665                          str(binSecTokNode.childNodes[0]._get_nodeValue()) + \ 
     733                x509CertTxt=str(binSecTokNode.childNodes[0]._get_nodeValue()) 
     734                 
     735                # Convert parsed cert text into form that can be read 
     736                # by X.509 string parser 
     737                if x509CertTxt[65] != "\n": 
     738                    # Expecting cert split into lines of length 64 bytes 
     739                    x509CertSpl = re.split('(.{64})', x509CertTxt) 
     740                    x509CertTxt = '\n'.join([i for i in x509CertSpl if i]) 
     741                     
     742                b64EncX509Cert = self.__class__.__beginCert + x509CertTxt + \ 
    666743                         self.__class__.__endCert 
    667744                              
    668745                self.__setVerifyingCert(b64EncX509Cert) 
    669746            except Exception, e: 
    670                 # Ignore exception for now to allow for problems with  
    671                 # WebSphere client setting X.509 cert 
    672                 # 
    673                 # P J Kershaw 05/02/07 
    674                 pass                  
    675747                raise VerifyError, "Error extracting BinarySecurityToken " + \ 
    676748                                   "from WSSE header: " + str(e) 
     
    685757        # Apply the signature verification 
    686758        try: 
    687             verify = bool(rsaPubKey.verify(signedInfoDigestValue,  
    688                                            signatureValue)) 
     759            verify = rsaPubKey.verify(signedInfoDigestValue, signatureValue) 
    689760        except RSA.RSAError, e: 
    690761            raise VerifyError, "Error in Signature: " + str(e) 
     
    9391010        # Check encryption method 
    9401011        keyEncrMethodNode = getElements(encrKeyNode, 'EncryptionMethod')[0]      
    941         keyAlgorithm = keyEncrMethodNode.getAttributeNodeNS(None,  
    942                                                             "Algorithm").value 
     1012        keyAlgorithm = keyEncrMethodNode.getAttributeNode("Algorithm").value 
    9431013        if keyAlgorithm != _ENCRYPTION.KT_RSA_1_5: 
    9441014            raise DecryptionError, \ 
     
    9771047 
    9781048            # Get the URI for the reference 
    979             dataRefURI = dataRefNode.getAttributeNodeNS(None, 'URI').value                             
     1049            dataRefURI = dataRefNode.getAttributeNode('URI').value                             
    9801050            if dataRefURI[0] != "#": 
    9811051                raise VerifyError, \ 
     
    9911061                 
    9921062            dataEncrMethodNode = getElements(encrNode, 'EncryptionMethod')[0]      
    993             dataAlgorithm = dataEncrMethodNode.getAttributeNodeNS(None,  
    994                                                             "Algorithm").value 
     1063            dataAlgorithm = \ 
     1064                        dataEncrMethodNode.getAttributeNode("Algorithm").value 
    9951065            try:         
    9961066                # Match algorithm name to Crypto module 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/AttAuthority/__init__.py

    r2085 r2136  
    8585    __validKeys = ( 'name', 
    8686                    'portNum', 
     87                    'useSSL', 
     88                    'sslCertFile', 
     89                    'sslKeyFile', 
    8790                    'keyFile', 
    8891                    'keyPwd', 
    8992                    'certFile', 
    9093                    'caCertFile', 
     94                    'clntCertFile', 
    9195                    'attCertLifetime', 
    9296                    'attCertNotBeforeOff', 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/AttAuthority/server-config.tac

    r2085 r2136  
    6666        request, response = AttAuthorityService.soap_getHostInfo(self, ps) 
    6767         
    68         response.Hostname = aaSrv.aa.hostInfo.keys()[0] 
    69         response.LoginURI = aaSrv.aa.hostInfo[response.Hostname]['loginURI'] 
    70         response.AaURI = aaSrv.aa.hostInfo[response.Hostname]['aaURI'] 
     68        response.Hostname = srv.aa.hostInfo.keys()[0] 
     69        response.LoginURI = srv.aa.hostInfo[response.Hostname]['loginURI'] 
     70        response.AaURI = srv.aa.hostInfo[response.Hostname]['aaURI'] 
    7171 
    7272        return request, response 
     
    7777                                        AttAuthorityService.soap_getTrustedHostInfo(self, ps) 
    7878         
    79         trustedHostInfo = aaSrv.aa.getTrustedHostInfo(role=request.Role) 
     79        trustedHostInfo = srv.aa.getTrustedHostInfo(role=request.Role) 
    8080 
    8181                # Convert ready for serialization 
     
    9999        request, response = AttAuthorityService.soap_getX509Cert(self, ps) 
    100100         
    101         x509Cert = X509CertRead(aaSrv.aa['certFile']) 
     101        x509Cert = X509CertRead(srv.aa['certFile']) 
    102102        response.X509Cert = x509Cert.toString() 
    103103        return request, response 
     
    107107 
    108108# Create Service 
    109 aaSrv = AttAuthorityServiceSub() 
     109srv = AttAuthorityServiceSub() 
    110110 
    111111 
     
    113113# public and private keys 
    114114WSSecurityHandler.signatureHandler = SignatureHandler(\ 
    115                                     signingCertFilePath=aaSrv.aa['certFile'], 
    116                                     signingPriKeyFilePath=aaSrv.aa['keyFile'], 
    117                                     signingPriKeyPwd=aaSrv.aa['keyPwd']) 
     115                                                                verifyingCertFilePath=srv.aa['clntCertFile'], 
     116                                signingCertFilePath=srv.aa['certFile'], 
     117                                signingPriKeyFilePath=srv.aa['keyFile'], 
     118                                signingPriKeyPwd=srv.aa['keyPwd']) 
    118119 
    119120# Add Service to Attribute Authority branch 
    120 root.putChild('AttributeAuthority', aaSrv) 
     121root.putChild('AttributeAuthority', srv) 
    121122siteFactory = Site(root) 
     123 
     124if srv.aa['useSSL']: 
     125        # Use SSL connection 
     126        from twisted.internet import ssl 
     127         
     128        # Nb. ssl.DefaultOpenSSLContextFactory requires pyOpenSSL 
     129        ctxFactory = ssl.DefaultOpenSSLContextFactory(srv.aa['sslKeyFile'],  
     130                                                                                                  srv.aa['sslCertFile']) 
     131        port = internet.SSLServer(srv.aa['portNum'], siteFactory, ctxFactory) 
     132else:    
     133        # Non-SSL 
     134        port = internet.TCPServer(srv.aa['portNum'], siteFactory) 
     135 
    122136application = service.Application("AttributeAuthorityContainer") 
    123 port = internet.TCPServer(aaSrv.aa['portNum'], siteFactory) 
    124137port.setServiceParent(application) 
     138         
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/MyProxy.py

    r2070 r2136  
    2424from M2Crypto import X509, RSA, EVP, m2, BIO, SSL 
    2525 
    26 import re 
    2726import base64 
    2827 
     
    3130import cElementTree as ElementTree 
    3231 
     32from ndg.security.common.openssl import OpenSSLConfig, OpenSSLConfigError 
    3333 
    3434 
     
    858858 
    859859 
    860 #_____________________________________________________________________________         
    861 class OpenSSLConfigError(Exception): 
    862     """Exceptions related to OpenSSLConfig class"""    
    863  
    864  
    865 #_____________________________________________________________________________         
    866 class OpenSSLConfig(object): 
    867     """Wrapper to OpenSSL Configuration file to allow extraction of 
    868     required distinguished name used for making certificate requests 
    869      
    870     @cvar __reqDnRE: regular expression pattern for locating required 
    871     distinguished name from the config file""" 
    872      
    873     __reqDnRE = '\[ req_distinguished_name \].*\[' 
    874      
    875     def __init__(self, filePath=None): 
    876         """Initial OpenSSL configuration optionally setting a file path to 
    877         read from 
    878          
    879         @param filePath: path to OpenSSL configuration file""" 
    880          
    881         # Content of file 
    882         self.__fileTxt = None 
    883         self.__setFilePath(filePath) 
    884  
    885              
    886     def __setFilePath(self, filePath): 
    887         """Set property method 
    888         @param filePath: path for OpenSSL configuration file""" 
    889         if filePath is not None: 
    890             if not isinstance(filePath, basestring): 
    891                 raise OpenSSLConfigError, \ 
    892                     "Input OpenSSL config file path must be a string" 
    893  
    894             self.__filePath = filePath 
    895                      
    896             try: 
    897                 if not os.access(self.__filePath, os.R_OK): 
    898                     raise OpenSSLConfigError, "not found or no read access" 
    899                                           
    900             except Exception, e: 
    901                 raise OpenSSLConfigError, \ 
    902                     "OpenSSL config file path is not valid: \"%s\": %s" % \ 
    903                     (self.__filePath, str(e)) 
    904  
    905  
    906     def __getFilePath(self): 
    907         """Get property method 
    908         @param filePath: file path for OpenSSL configuration file""" 
    909         return self.__filePath 
    910  
    911     filePath = property(fget=__getFilePath, 
    912                         fset=__setFilePath, 
    913                         doc="file path for configuration file") 
    914      
    915     def __getFileTxt(self): 
    916         """Get content of file in call to getReqDN 
    917         @return string content of file""" 
    918         return self.__fileTxt 
    919      
    920     def __setFileTxt(self, input): 
    921         """Set content of file 
    922         @param input: string content of  file. - Set to None to re-read  
    923         file content in call to getReqDN""" 
    924         self.__fileTxt = input 
    925      
    926      
    927     fileTxt = property(fset=__setFileTxt, 
    928                        fget=__getFileTxt, 
    929                        doc="Content of SSL file") 
    930      
    931     def _read(self): 
    932         """Read OpenSSL configuration file and return as string 
    933          
    934         @return fileTxt: content of the file""" 
    935  
    936         self.__fileTxt = self.__fileTxt or open(self.__filePath).read() 
    937         return self.__fileTxt 
    938  
    939  
    940     def getReqDN(self): 
    941         """Read Required DN parameters from the configuration file returning 
    942         them in a dictionary 
    943          
    944         @return Distinguished Name OU and O defaults in a dictionary""" 
    945          
    946         # Nb. Match over line boundaries 
    947         try: 
    948             reqDnTxt = re.findall(self.__reqDnRE, self._read(), re.S)[0] 
    949  
    950             # Separate lines 
    951             reqDnLines = reqDnTxt.split(os.linesep) 
    952              
    953             # Match the '*_default' entries and make a dictionary 
    954             # 
    955             # Make sure comment lies are omitted - P J Kershaw 22/07/05 
    956             return dict([re.split('_default\s*=\s*', line) \ 
    957                          for line in reqDnLines \ 
    958                          if re.match('[^#].*_default\s*=', line)])  
    959         except Exception, e: 
    960             raise "Error reading content of OpenSSL config file \"%s\: %s" % \ 
    961                                                     (self.__filePath, str(e)) 
    962  
    963  
    964860#_____________________________________________________________________________    
    965861def main(): 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/SessionMgr/Makefile

    r2058 r2136  
    44# @author P J Kershaw 25/01/07 
    55# 
    6 # Generate web service stubs from WSDL for Attribute Authority client and 
     6# Generate web service stubs from WSDL for Session Manager client and 
    77# server side code 
    88# 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/SessionMgr/__init__.py

    r2085 r2136  
    309309    { 
    310310        'portNum':        None, 
     311        'useSSL':         None, 
     312        'sslCertFile':    None, 
     313        'sslKeyFile':     None, 
    311314        'caCertFile':     None, 
    312315        'certFile':       None, 
    313316        'keyFile':        None, 
    314317        'keyPwd':         None, 
    315         'useSSL':         None, 
    316         'sslCertFile':    None, 
    317         'sslKeyFile':     None, 
     318        'clntCertFile':   None, 
    318319        'sessMgrEncrKey': None,  
    319320        'sessMgrURI':     None, 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/SessionMgr/server-config.tac

    r2108 r2136  
    11#!/usr/bin/env python 
    2 """NDG Security Attribute Authority .tac file  
     2"""NDG Security Session Manager .tac file  
    33 
    44This file enables the Session Manager web service to be  
     
    100100 
    101101# Create Service 
    102 smSrv = SessionMgrServiceSub() 
     102srv = SessionMgrServiceSub() 
    103103 
    104104# Initialise WS-Security signature handler passing Attribute Authority 
    105105# public and private keys 
    106106WSSecurityHandler.signatureHandler = SignatureHandler(\ 
    107                                                                         verifyingCertFilePath='/home/pjkersha/Development/security/python/Tests/webSphereTestcert.pem', 
    108                                     signingCertFilePath=smSrv.sm['certFile'], 
    109                                     signingPriKeyFilePath=smSrv.sm['keyFile'], 
    110                                     signingPriKeyPwd=smSrv.sm['keyPwd']) 
     107                                                                verifyingCertFilePath=srv.sm['clntCertFile'], 
     108                                    signingCertFilePath=srv.sm['certFile'], 
     109                                    signingPriKeyFilePath=srv.sm['keyFile'], 
     110                                    signingPriKeyPwd=srv.sm['keyPwd']) 
    111111 
    112112# Add Service to Session Manager branch 
    113113root = Resource() 
    114 root.putChild('SessionManager', smSrv) 
     114root.putChild('SessionManager', srv) 
    115115siteFactory = Site(root) 
    116 application = service.Application("SessionManagerContainer") 
    117116 
    118 if smSrv.sm['useSSL']: 
     117if srv.sm['useSSL']: 
    119118        # Use SSL connection 
    120119        from twisted.internet import ssl 
    121120         
    122121        # Nb. ssl.DefaultOpenSSLContextFactory requires pyOpenSSL 
    123         ctxFactory = ssl.DefaultOpenSSLContextFactory(smSrv.sm['sslKeyFile'],  
    124                                                                                                   smSrv.sm['sslCertFile']) 
    125         port = internet.SSLServer(smSrv.sm['portNum'], siteFactory, ctxFactory) 
     122        ctxFactory = ssl.DefaultOpenSSLContextFactory(srv.sm['sslKeyFile'],  
     123                                                                                                  srv.sm['sslCertFile']) 
     124        port = internet.SSLServer(srv.sm['portNum'], siteFactory, ctxFactory) 
    126125else:    
    127126        # Non-SSL 
    128         port = internet.TCPServer(smSrv.sm['portNum'], siteFactory) 
     127        port = internet.TCPServer(srv.sm['portNum'], siteFactory) 
    129128 
     129application = service.Application("SessionManagerContainer") 
    130130port.setServiceParent(application) 
  • TI12-security/trunk/python/ndg.security.server/setup.py

    r1784 r2136  
    5454    "http://www.zope.org/Products/ZopeInterface/3.0.1final/ZopeInterface-3.0.1.tgz", 
    5555    "http://prdownloads.sourceforge.net/pyxml/PyXML-0.8.4.tar.gz?use_mirror=kent", 
    56     "http://tmrc.mit.edu/mirror/twisted/Web/0.5/TwistedWeb-0.5.0.tar.bz2", 
    57     "http://tmrc.mit.edu/mirror/twisted/Twisted/2.2/TwistedSumo-2006-02-12.tar.bz2", 
     56#    "http://tmrc.mit.edu/mirror/twisted/Web/0.5/TwistedWeb-0.5.0.tar.bz2", 
     57#    "http://tmrc.mit.edu/mirror/twisted/Twisted/2.2/TwistedSumo-2006-02-12.tar.bz2", 
    5858] 
    5959 
     
    6868    'version':                  '0.7.2', 
    6969    'description':              'NERC DataGrid Security Services', 
    70     'long_description':         'Software for securing NDG resources', 
     70    'long_description':         'Server side component for securing NDG resources', 
    7171    'author':                   'Philip Kershaw', 
    7272    'author_email':             'P.J.Kershaw@rl.ac.uk', 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/AttAuthority/attAuthorityClientTest.cfg

    r2086 r2136  
    1010# ! SiteBMapConfig.xml trusted site A aaURI setting must agree with this  
    1111# setting for test6GetMappedAttCert 
    12 uri = http://localhost:5000/AttributeAuthority 
     12#uri = http://localhost:5000/AttributeAuthority 
     13uri = http://glue.badc.rl.ac.uk:42000/AttributeAuthority 
    1314 
    1415# X.509 certificate for Attribute Authority - to verify the signature of 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/AttAuthority/siteAAttAuthorityProperties.xml

    r2051 r2136  
    33    <name>Site A</name> 
    44    <portNum>5000</portNum> 
     5    <useSSL>Yes</useSSL> <!-- leave blank to use http --> 
     6    <sslCertFile></sslCertFile> 
     7    <sslKeyFile></sslKeyFile> 
    58    <keyFile>$NDGSEC_AA_UNITTEST_DIR/aa-key.pem</keyFile> 
    69    <keyPwd>Junk</keyPwd> 
    710    <certFile>$NDGSEC_AA_UNITTEST_DIR/aa-cert.pem</certFile> 
    811    <caCertFile>$NDGSEC_AA_UNITTEST_DIR/cacert.pem</caCertFile> 
     12    <!--  
     13    Set the certificate used to verify the signature of messages from the  
     14    client.  This can usually be left blank since the client is expected to  
     15    include the cert with the signature in the inbound SOAP message 
     16    --> 
     17    <clntCertFile></clntCertFile>     
    918    <attCertLifetime>28800</attCertLifetime> 
    1019        <attCertNotBeforeOff>0</attCertNotBeforeOff> 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/AttAuthority/siteBAttAuthorityProperties.xml

    r2051 r2136  
    33    <name>Site B</name> 
    44    <portNum>5100</portNum> 
     5    <useSSL>Yes</useSSL> <!-- leave blank to use http --> 
     6    <sslCertFile></sslCertFile> 
     7    <sslKeyFile></sslKeyFile> 
    58    <keyFile>$NDGSEC_AA_UNITTEST_DIR/aa-key.pem</keyFile> 
    69    <keyPwd>Junk</keyPwd> 
    710    <certFile>$NDGSEC_AA_UNITTEST_DIR/aa-cert.pem</certFile> 
    811    <caCertFile>$NDGSEC_AA_UNITTEST_DIR/cacert.pem</caCertFile> 
     12    <!--  
     13    Set the certificate used to verify the signature of messages from the  
     14    client.  This can usually be left blank since the client is expected to  
     15    include the cert with the signature in the inbound SOAP message 
     16    --> 
     17    <clntCertFile></clntCertFile>     
    918    <attCertLifetime>28800</attCertLifetime> 
    1019        <attCertNotBeforeOff>0</attCertNotBeforeOff> 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/SessionMgr/sessionMgrClientTest.cfg

    r2085 r2136  
    3434  
    3535[test2CookieConnect]          
    36 #username = sstljakTestUser 
    37 username = gabriel 
     36username = sstljakTestUser 
     37#username = gabriel 
    3838#passphrase =  
    3939 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/SessionMgr/sessionMgrProperties.xml

    r2070 r2136  
    11<?xml version="1.0" encoding="utf-8"?> 
    22<sessMgrProp> 
     3    <portNum>5700</portNum> 
     4    <useSSL>Yes</useSSL> <!-- leave blank to use http --> 
     5    <sslCertFile>$NDGSEC_SM_UNITTEST_DIR/sm-cert.pem</sslCertFile> 
     6    <sslKeyFile>$NDGSEC_SM_UNITTEST_DIR/sm-key.pem</sslKeyFile> 
    37    <caCertFile>$NDGSEC_SM_UNITTEST_DIR/cacert.pem</caCertFile> 
    48    <certFile>$NDGSEC_SM_UNITTEST_DIR/sm-cert.pem</certFile> 
    59    <keyFile>$NDGSEC_SM_UNITTEST_DIR/sm-key.pem</keyFile> 
    610    <keyPwd/> 
    7     <useSSL>Yes</useSSL> <!-- leave blank to use http --> 
    8     <sslCertFile>$NDGSEC_SM_UNITTEST_DIR/sm-cert.pem</sslCertFile> 
    9     <sslKeyFile>$NDGSEC_SM_UNITTEST_DIR/sm-key.pem</sslKeyFile> 
    10     <portNum>5700</portNum> 
     11    <!--  
     12    Set the certificate used to verify the signature of messages from the  
     13    client.  This can usually be left blank since the client is expected to  
     14    include the cert with the signature in the inbound SOAP message 
     15    --> 
     16    <clntCertFile></clntCertFile>     
    1117    <sessMgrEncrKey>abcdef0123456789</sessMgrEncrKey> 
    1218    <sessMgrURI>https://localhost:5700/SessionManager</sessMgrURI> 
  • TI12-security/trunk/python/www/html/certificateAuthority.wsdl

    r2130 r2136  
    11<?xml version="1.0" encoding="utf-8"?> 
    2 <wsdl:definitions name="SimpleCA" 
     2<wsdl:definitions name="CertificateAuthority" 
    33 xmlns="http://schemas.xmlsoap.org/wsdl/" 
    44 xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
     
    77 xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" 
    88 xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    9  xmlns:tns="urn:ndg:security" 
    10  xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility" 
    11  targetNamespace="urn:ndg:security"> 
     9 xmlns:tns="urn:ndg:security:ca" 
     10 targetNamespace="urn:ndg:security:ca"> 
    1211 
    1312  <wsdl:types> 
    14     <xsd:schema> 
    15       <xsd:element name="signCertReq"> 
     13    <xsd:schema targetNamespace="urn:ndg:security:ca"> 
     14     
     15      <xsd:element name="issueCert"> 
    1616        <xsd:complexType> 
    1717          <xsd:sequence> 
     
    2020        </xsd:complexType> 
    2121      </xsd:element> 
    22       <xsd:element name="signCertReqResponse"> 
     22       
     23      <xsd:element name="issueCertResponse"> 
    2324        <xsd:complexType> 
    2425                  <xsd:sequence> 
    25                 <xsd:element name="x509Cert" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
     26                <xsd:element name="x509Cert" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
    2627                  </xsd:sequence> 
    2728                </xsd:complexType> 
    2829      </xsd:element> 
     30     
     31      <xsd:element name="revokeCert"> 
     32        <xsd:complexType> 
     33          <xsd:sequence> 
     34            <xsd:element name="x509Cert" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
     35          </xsd:sequence> 
     36        </xsd:complexType> 
     37      </xsd:element> 
     38       
     39      <xsd:element name="revokeCertResponse"> 
     40        <xsd:complexType/> 
     41      </xsd:element> 
     42     
     43      <xsd:element name="getCRL"> 
     44        <xsd:complexType/> 
     45      </xsd:element> 
     46       
     47      <xsd:element name="getCRLResponse"> 
     48        <xsd:complexType> 
     49          <xsd:sequence> 
     50            <xsd:element name="crl" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
     51          </xsd:sequence> 
     52        </xsd:complexType> 
     53      </xsd:element> 
     54       
    2955    </xsd:schema> 
    3056  </wsdl:types> 
    3157 
    32   <wsdl:message name="signCertReq"> 
    33     <wsdl:part name="parameters" element="signCertReq"/> 
     58  <wsdl:message name="issueCertInputMsg"> 
     59    <wsdl:part name="parameters" element="tns:issueCert"/> 
    3460  </wsdl:message> 
    3561 
    36   <wsdl:message name="signCertReqResponse"> 
    37     <wsdl:part name="parameters" element="signCertReqResponse"/> 
     62  <wsdl:message name="issueCertOutputMsg"> 
     63    <wsdl:part name="parameters" element="tns:issueCertResponse"/> 
    3864  </wsdl:message> 
    3965 
    40   <wsdl:portType name="SimpleCA"> 
    41     <wsdl:operation name="signCertReq"> 
    42       <wsdl:input message="tns:signCertReqInputMsg"/> 
    43       <wsdl:output message="tns:signCertReqOutputMsg"/> 
     66  <wsdl:message name="revokeCertInputMsg"> 
     67    <wsdl:part name="parameters" element="tns:revokeCert"/> 
     68  </wsdl:message> 
     69 
     70  <wsdl:message name="revokeCertOutputMsg"> 
     71    <wsdl:part name="parameters" element="tns:revokeCertResponse"/> 
     72  </wsdl:message> 
     73 
     74  <wsdl:message name="getCRLInputMsg"> 
     75    <wsdl:part name="parameters" element="tns:getCRL"/> 
     76  </wsdl:message> 
     77 
     78  <wsdl:message name="getCRLOutputMsg"> 
     79    <wsdl:part name="parameters" element="tns:getCRLResponse"/> 
     80  </wsdl:message> 
     81 
     82  <wsdl:portType name="CertificateAuthority"> 
     83    <wsdl:operation name="issueCert"> 
     84      <wsdl:input message="tns:issueCertInputMsg"/> 
     85      <wsdl:output message="tns:issueCertOutputMsg"/>      
     86    </wsdl:operation> 
     87     
     88    <wsdl:operation name="revokeCert"> 
     89      <wsdl:input message="tns:revokeCertInputMsg"/> 
     90      <wsdl:output message="tns:revokeCertOutputMsg"/> 
     91    </wsdl:operation> 
     92     
     93    <wsdl:operation name="getCRL"> 
     94      <wsdl:input message="tns:getCRLInputMsg"/> 
     95      <wsdl:output message="tns:getCRLOutputMsg"/> 
    4496    </wsdl:operation> 
    4597  </wsdl:portType> 
    4698 
    47   <wsdl:binding name="SimpleCABinding" type="tns:SimpleCA"> 
     99  <wsdl:binding name="CertificateAuthorityBinding" type="tns:CertificateAuthority"> 
    48100    <soap:binding 
    49101     style="document" 
    50102     transport="http://schemas.xmlsoap.org/soap/http"/> 
    51     <wsdl:operation name="signCertReq"> 
    52       <soap:operation soapAction="signCertReq"/> 
     103    <wsdl:operation name="issueCert"> 
     104      <soap:operation soapAction="issueCert"/> 
     105      <wsdl:input> 
     106        <soap:body use="literal"/> 
     107      </wsdl:input> 
     108      <wsdl:output> 
     109        <soap:body use="literal"/> 
     110      </wsdl:output> 
     111    </wsdl:operation> 
     112     
     113    <wsdl:operation name="revokeCert"> 
     114      <soap:operation soapAction="revokeCert"/> 
     115      <wsdl:input> 
     116        <soap:body use="literal"/> 
     117      </wsdl:input> 
     118      <wsdl:output> 
     119        <soap:body use="literal"/> 
     120      </wsdl:output> 
     121    </wsdl:operation> 
     122     
     123    <wsdl:operation name="getCRL"> 
     124      <soap:operation soapAction="getCRL"/> 
    53125      <wsdl:input> 
    54126        <soap:body use="literal"/> 
     
    60132  </wsdl:binding> 
    61133 
    62   <wsdl:service name="SimpleCAService"> 
    63     <wsdl:documentation>SimpleCA web service</wsdl:documentation> 
    64     <wsdl:port name="SimpleCA" binding="tns:SimpleCABinding"> 
     134  <wsdl:service name="CertificateAuthorityService"> 
     135    <wsdl:documentation>NDG Certificate Authority web service</wsdl:documentation> 
     136    <wsdl:port name="CertificateAuthority" binding="tns:CertificateAuthorityBinding"> 
    65137      <soap:address location="http://localhost:5001"/> 
    66138    </wsdl:port> 
Note: See TracChangeset for help on using the changeset viewer.