Changeset 7651


Ignore:
Timestamp:
22/10/10 16:02:55 (9 years ago)
Author:
pjkersha
Message:

ESG System SSL unittests

  • added error output for OpenSSL error number - useful for troubleshoot verification errors.
Location:
TI12-security/trunk/esg_system_tests/esg/security/test/system
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/esg_system_tests/esg/security/test/system/test_ssl.cfg

    r7552 r7651  
    44priKeyFilePath = %(here)s/pki/ 
    55endpoints =  
    6         localhost:7443 
    7     www.google.com:443 
     6        pcmdi3.llnl.gov:443 
     7#       localhost:7443 
     8#   www.google.com:443 
    89#       ceda.ac.uk:443  
    910#       myproxy.ceda.ac.uk:7512 
  • TI12-security/trunk/esg_system_tests/esg/security/test/system/test_ssl.py

    r7553 r7651  
    2323 
    2424 
     25class SSLTestCaseConfigException(Exception): 
     26    """Invalid Config file settings""" 
     27     
     28     
    2529class SSLTestCase(unittest.TestCase): 
    2630    """Test SSL endpoints in ESG federation""" 
     
    3741        self.endpoints = [] 
    3842        for i in cfg.get('DEFAULT', 'endpoints').split(): 
    39             fqdn, port = i.split(':')  
     43            try: 
     44                fqdn, port = i.split(':')  
     45            except ValueError: 
     46                raise SSLTestCaseConfigException("Reading configuration file " 
     47                                                 "%r - endpoints format is " 
     48                                                 "<fqdn>:<portnum>",  
     49                                                 self.__class__.INI_FILEPATH) 
    4050            self.endpoints.append((fqdn, int(port))) 
    4151         
     
    4454        self.ctx.set_verify_depth(9) 
    4555         
    46         def _callback(conn, x509, errorNum, errorDepth,  preverifyOK): 
     56        def _callback(conn, x509, errorNum, errorDepth, preverifyOK): 
     57            if errorNum != 0: 
     58                dn = x509.get_subject() 
     59                log.error("Error number for certificate %s is %d", dn, errorNum) 
     60                 
    4761            return preverifyOK 
    4862         
     
    6781                      (endpoint, traceback.format_exc())) 
    6882            return False 
    69      
    70     def _test_m2crypto_connection(self, endpoint): 
    71         log.info('Probing %s:%d ...' % endpoint) 
    72         sock = socket.socket() 
    73         sock.settimeout(3.0) 
    74          
    75         import M2Crypto 
    76         ctx = M2Crypto.SSL.Context("sslv3") 
    77          
    78         ctx.load_verify_locations(capath=self.caCertDir) 
    79          
    80         ctx.set_verify(M2Crypto.SSL.verify_peer |  
    81                        M2Crypto.SSL.verify_fail_if_no_peer_cert,  
    82                        depth=9) 
    83         conn = M2Crypto.SSL.Connection(ctx, sock) 
    84          
    85         try: 
    86             conn.connect(endpoint) 
    87         except socket.timeout: 
    88             log.error("Socket timeout for %r: %s" % 
    89                       (endpoint, traceback.format_exc())) 
    90             return False 
    91              
    92         except socket.error: 
    93             log.error("Socket error for %r: %s" % 
    94                       (endpoint, traceback.format_exc())) 
    95             return False 
    96          
    97         except Exception: 
    98             log.error("Unknown error for %r: %s" % 
    99                       (endpoint, traceback.format_exc())) 
    100             return False 
    101              
    102         return True 
    10383        
    104     def test01(self): 
     84    def test01ValidPeerCerts(self): 
     85        # Verify all peers have EECs issued by valid ESG CAs 
    10586        nFails = 0 
    10687        for i in self.endpoints: 
     
    10990 
    11091        self.failIf(nFails > 0, "%d connection failure(s)" % nFails) 
     92 
     93    def test02HttpsEnforcedWhitelisting(self): 
     94        # Check HTTPS endpoints have correct whitelisting enforced - expect 
     95        # negative result as this client holds an invalid certificate 
     96        pass 
    11197         
    112     def _test_m2crypto(self): 
    113         nFails = 0 
    114         for i in self.endpoints: 
    115             if not self._test_m2crypto_connection(i): 
    116                 nFails += 1 
    117  
    118         self.failIf(nFails > 0, "%d connection failure(s)" % nFails)         
    119  
    12098if __name__ == "__main__": 
    12199    unittest.main() 
Note: See TracChangeset for help on using the changeset viewer.