Changeset 1192


Ignore:
Timestamp:
12/13/06 10:43:13 (6 years ago)
Author:
mglb1
Message:

Move certificate creation code into a specific function to avoid duplication.
This allows other modules to request that the CA creates a new key/cert pair.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • ccsd/trunk/crcnetd/_utils/ccsd_ca.py

    r1125 r1192  
    660660        log_info("CA: %s" % message) 
    661661         
     662    def ensureCertificateExists(self, name): 
     663        certname = "%s-cert.pem" % name 
     664        keyname = "%s-key.pem" % name 
     665        reqname = "%s-req.pem" % name 
     666        if self.hasfile(certname) and self.hasfile(keyname): 
     667            return True 
     668        # No cert/key in repository 
     669        log_info("Creating certificate for %s" % name) 
     670        sParams = self.getCAParameters().copy() 
     671        sParams["CN"] = name 
     672        sParams["emailAddress"] = "root@%s" % \ 
     673                config_get_required("network", "domain") 
     674        # Generate the new key / request 
     675        (csr, key) = createKey(0, sParams) 
     676        # Get it signed 
     677        cert = self.signReq(csr) 
     678        # Add it to the repository for safe-keeping 
     679        try: 
     680            a = self.addfile(certname, cert) 
     681            b = self.addfile(keyname, key) 
     682            c = self.addfile(reqname, csr) 
     683            self.checkin("Added %s certificate and key" % name, [a, b, c]) 
     684            return True 
     685        except ccs_ca_error: 
     686            (type, value, tb) = sys.exc_info() 
     687            log_error("CA: Failed to create key for %s: %s" % \ 
     688                    (name, value), (type, value, tb)) 
     689         
     690        return False 
     691 
    662692    def findByCN(self, desiredCN): 
    663693        """Searches the certificate database for records with matching CNs""" 
     
    748778        log_fatal("CA: Unable to initialise: %s" % value, \ 
    749779                (type, value, tb)) 
    750          
    751     # Setup the default parameters for new certificates 
    752     certParams = ca.getCAParameters() 
    753780     
    754781    # Ensure there is a server key, and a client key for the web interface 
    755782    # and the pxeboot scripts 
    756783    for name in ["server", "ccsweb", "pxe-scripts"]: 
    757         certname = "%s-cert.pem" % name 
    758         keyname = "%s-key.pem" % name 
    759         reqname = "%s-req.pem" % name 
    760         if ca.hasfile(certname) and ca.hasfile(keyname): 
    761             continue 
    762         # No cert/key in repository 
    763         log_info("Creating certificate for %s" % name) 
    764         sParams = certParams.copy() 
    765         sParams["CN"] = name 
    766         sParams["emailAddress"] = "root@%s" % \ 
    767                 config_get_required("network", "domain") 
    768         # Generate the new key / request 
    769         (csr, key) = createKey(0, sParams) 
    770         # Get it signed 
    771         cert = ca.signReq(csr) 
    772         # Add it to the repository for safe-keeping 
    773         try: 
    774             a = ca.addfile(certname, cert) 
    775             b = ca.addfile(keyname, key) 
    776             c = ca.addfile(reqname, csr) 
    777             ca.checkin("Added %s certificate and key" % name, [a, b, c]) 
    778         except ccs_ca_error: 
    779             (type, value, tb) = sys.exc_info() 
    780             log_fatal("CA: Failed to create key for %s: %s" % \ 
    781                     (name, value), (type, value, tb)) 
    782  
     784        if not ca.ensureCertificateExists(name): 
     785            log_fatal("CA: %s is a required key. Exiting!" % name) 
     786 
Note: See TracChangeset for help on using the changeset viewer.