Changeset 920


Ignore:
Timestamp:
12/05/06 17:30:41 (13 years ago)
Author:
pjkersha
Message:

Added XML signature to Logging WS clients for message security. XMLMsg can now perform
XML signature and checking but these are separate methods and not integrated with init

Location:
TI12-security/trunk/python/NDG
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/python/NDG/Log.py

    r917 r920  
    3737    __dateFmt = '%d %b %Y %H:%M:%S' 
    3838     
     39    # Log file size limit and number of backups saved 
     40    __maxBytes = 1048576 
     41    __backUpCnt = 10 
     42     
    3943    def __init__(self, logName='', logFilePath=None, console=False): 
    4044        """NDG Logging class 
     
    7074        if logFilePath: 
    7175            fileLog = RotatingFileHandler(logFilePath,  
    72                                           maxBytes=1048576,  
    73                                           backupCount=10) 
     76                                          maxBytes=self.__maxBytes,  
     77                                          backupCount=self.__backUpCnt) 
    7478            fileLog.setFormatter(formatter) 
    7579             
  • TI12-security/trunk/python/NDG/XMLMsg.py

    r751 r920  
    1010version 1.0 or later. 
    1111""" 
    12  
    13 cvsID = '$Id$' 
    1412 
    1513# For new line symbol 
     
    5452                 encrPriKeyFilePath=None, 
    5553                 encrPriKeyPwd=None, 
     54                 signingKeyFilePath=None, 
     55                 signingKeyPwd=None, 
     56                 signingCertFilePath=None, 
     57                 signatureChkCertFilePath=None, 
    5658                 xmlVers="1.0", 
    5759                 xmlEncoding="UTF-8", 
     
    9698        # Initialisation for XML Security class used for encryption 
    9799        try: 
     100            if signingCertFilePath: 
     101                # Add cert to signature 
     102                certFilePathList = signingCertFilePath 
     103                 
     104            elif signatureChkCertFilePath: 
     105                #  Check an existing doc using the input cert file 
     106                certFilePathList = signatureChkCertFilePath 
     107            else: 
     108                certFilePathList = None 
     109                     
    98110            self.__xmlSecDoc=XMLSecDoc(encrPriKeyFilePath=encrPriKeyFilePath, 
    99                                        encrPubKeyFilePath=encrPubKeyFilePath) 
     111                                       encrPubKeyFilePath=encrPubKeyFilePath, 
     112                                       signingKeyFilePath=signingKeyFilePath, 
     113                                       certFilePathList=certFilePathList) 
    100114        except Exception, e: 
    101115            raise XMLMsgError("Error initialising XML security: %s" % e)      
     
    115129            try: 
    116130                self.decrypt(encrPriKeyPwd, encrXMLtxt) 
    117                             
     131                 
    118132            except Exception, e: 
    119133                raise XMLMsgError("Error decrypting input text: %s" % e)      
     
    428442        self.__xmlSecDoc.decrypt(xmlTxt=xmlTxt, encrPriKeyPwd=encrPriKeyPwd) 
    429443        self.__xmlTxt = str(self.__xmlSecDoc) 
     444 
    430445    
     446    #_________________________________________________________________________ 
     447    def sign(self, 
     448             signingKeyFilePath=None, 
     449             signingKeyPwd=None, 
     450             signingCertFilePath=None): 
     451        """Digitally sign message""" 
     452         
     453        self.__xmlSecDoc.sign(xmlTxt=self.__xmlTxt, 
     454                              signingKeyFilePath=signingKeyFilePath, 
     455                              signingKeyPwd=signingKeyPwd, 
     456                              certFilePathList=signingCertFilePath) 
     457        self.__xmlTxt = str(self.__xmlSecDoc) 
     458 
     459    
     460    #_________________________________________________________________________ 
     461    def isValidSig(self, *certFilePathList): 
     462        """Check digital signature of message""" 
     463         
     464        if certFilePathList == (): 
     465            certFilePathList = None 
     466             
     467        return self.__xmlSecDoc.isValidSig(xmlTxt=self.__xmlTxt, 
     468                                           certFilePathList=certFilePathList) 
  • TI12-security/trunk/python/NDG/XMLSecDoc.py

    r751 r920  
    3131 
    3232# XML security module 
    33 import xmlsec 
    34  
    35  
    36  
    37 class XMLSecDocMetaClass(type): 
    38     def __init__(cls, name, bases, dict): 
    39          
    40         # Init xmlsec library 
    41         if xmlsec.init() < 0: 
    42             raise XMLSecDocError("xmlsec initialization failed.") 
    43  
    44          
    45         # Check loaded library version 
    46         if xmlsec.checkVersion() != 1: 
    47             raise XMLSecDocError("xmlsec library version is not compatible.") 
    48  
    49  
    50         # Init crypto library 
    51         if xmlsec.cryptoAppInit(None) < 0: 
    52             raise XMLSecDocError("Crypto initialization failed.") 
    53  
    54          
    55         # Init xmlsec-crypto library 
    56         if xmlsec.cryptoInit() < 0: 
    57             raise XMLSecDocError("xmlsec-crypto initialization failed.") 
    58          
     33import xmlsec         
    5934 
    6035 
     
    6742    def __str__(self): 
    6843        return self.__msg 
    69  
    70  
    7144 
    7245 
     
    413386        elif isinstance(filePath, list): 
    414387            self.__certFilePathList = filePath 
     388                                             
     389        elif isinstance(filePath, tuple): 
     390            self.__certFilePathList = list(filePath) 
    415391 
    416392        else: 
     
    550526        signingKeyPwd:          password for signing key file. 
    551527 
    552         certFilePathList:    file path to certificate file of Attribute 
    553                                 Authority  - may also be set in  __init__ 
     528        certFilePathList:       file paths to certificate files 
    554529                                """ 
    555530 
     
    611586        signingKeyPwd:          password for signing key file. 
    612587         
    613         certFilePathList:       file path to certificate file of Attribute 
    614                                 Authority  - may also be set in  __init__ 
     588        certFilePathList:       include certificate of signer  
    615589            inclX509Cert:                   include MIME encoded content of X.509  
    616590                                                certificate that will sign the document 
     
    784758                                by self.__filePath is read instead. 
    785759 
    786         certFilePathList:    Certificate used to sign the document. 
     760        certFilePathList:       Certificate used to sign the document. 
    787761                                """ 
    788762 
  • TI12-security/trunk/python/NDG/log_services_server.py

    r917 r920  
    1313version 1.0 or later. 
    1414""" 
     15import os 
    1516 
    1617from log_services import * 
     
    1819 
    1920from Log import * 
     21from LogIO import * 
    2022 
    2123 
     
    3638        self.__srv = srv         
    3739        self.__debug = debug 
     40        self.__caCertFilePath = os.path.expandvars(\ 
     41                                             "$NDG_DIR/conf/certs/cacert.pem") 
    3842         
    3943 
     
    4650         
    4751        # input vals in request object 
    48         args = ps.Parse(debugRequestWrapper) 
    49         reqTxt = str(args._debugReq)         
     52        reqArgs = ps.Parse(debugRequestWrapper)         
     53        req = DebugReq(xmlTxt=str(reqArgs._debugReq))         
    5054 
    5155        # assign return values to response object 
    5256        response = debugResponseWrapper() 
    5357         
    54         try: 
    55             self.__srv.debug(reqTxt) 
     58        try:             
     59            if not req.isValidSig(self.__caCertFilePath): 
     60                response._debugResp = "Client signature is invalid" 
     61                 
     62            self.__srv.debug(req['msg']) 
    5663 
    5764        except Exception, e: 
     
    7077         
    7178        # input vals in request object 
    72         args = ps.Parse(errorRequestWrapper) 
    73         reqTxt = str(args._errorReq)         
     79        reqArgs = ps.Parse(errorRequestWrapper) 
     80        req = ErrorReq(xmlTxt=str(reqArgs._errorReq))        
    7481 
    7582        # assign return values to response object 
     
    7784         
    7885        try: 
    79             self.__srv.error(reqTxt) 
     86            if not req.isValidSig(self.__caCertFilePath): 
     87                response._errorResp = "Client signature is invalid" 
     88                 
     89            self.__srv.error(req['msg']) 
    8090 
    8191        except Exception, e: 
     
    94104         
    95105        # input vals in request object 
    96         args = ps.Parse(infoRequestWrapper) 
    97         reqTxt = str(args._infoReq)         
     106        reqArgs = ps.Parse(infoRequestWrapper) 
     107        req = InfoReq(xmlTxt=str(reqArgs._infoReq))        
    98108 
    99109        # assign return values to response object 
     
    101111         
    102112        try: 
    103             self.__srv.info(reqTxt) 
     113            if not req.isValidSig(self.__caCertFilePath): 
     114                response._infoResp = "Client signature is invalid" 
     115 
     116            self.__srv.info(req['msg']) 
    104117 
    105118        except Exception, e: 
     
    118131         
    119132        # input vals in request object 
    120         args = ps.Parse(warningRequestWrapper) 
    121         reqTxt = str(args._warningReq)         
     133        reqArgs = ps.Parse(warningRequestWrapper) 
     134        req = WarningReq(xmlTxt=str(reqArgs._warningReq))        
    122135 
    123136        # assign return values to response object 
     
    125138         
    126139        try: 
    127             self.__srv.warning(reqTxt) 
     140            if not req.isValidSig(self.__caCertFilePath): 
     141                response._warningResp = "Client signature is invalid" 
     142                 
     143            self.__srv.warning(req['msg']) 
    128144 
    129145        except Exception, e: 
Note: See TracChangeset for help on using the changeset viewer.