Example #1
0
 def init_dist_point(self, url, verification=None):
     '''
     Initializes CDP - downloads and parses CRL.
     Returns number of certificates added to revoked
     certificates list.
     '''
     dpoint = self.find_dpoint(url)
     if dpoint is not None:
         self.changed = True
         if dpoint.lastUpdated is None:
             logger.debug("Initializing dpoint %s", url)
             downloaded = self.__download_crl(url)
             if downloaded is None:
               return False, 0
             crl = self.__decode_crl(downloaded)
             if (verification is not None):                    
                 verified = crl_verifier.verify_crl(crl, verification)
                 if not verified:
                     logger.warning('CRL verification failed')
                     return True, 0
                 else:
                     logger.info("CRL verified")
             return True, dpoint.update_revoked_list(crl)
         else:
           logger.warning("CDP %s is already initialized. Try to refresh it" % url)
           return True, 0
     else:
         logger.error("Distpoint %s not found. Has it already been added?"%url)
         return True, 0
Example #2
0
 def refresh_dist_point(self, url, verification=None, force_download=False):
     '''
     Refreshes CRL of distribution point specified by url.
     If the time of thisUpdate of downloaded CRL is the same 
     as time in lastUpdate of current version, does not do anything.
     Returns boolean value telling the result of download attempt and number of added certificates
     '''
     dpoint = self.find_dpoint(url)
     if dpoint is not None:
         last_updated = dpoint.lastUpdated
         logger.debug("Refreshing dpoint %s", url)
         # check time of next update - if it is in the future, return True,0
         # download only in case when nextUpdate time passed               
         if force_download:
           logger.debug("Force download parameter set, ignoring nextUpdate parameter of CRL")             
         else:
           # if force download was not set, check the nextUpdate parameter
           if dpoint.nextUpdate:
             next_time = timeutil.to_time(dpoint.nextUpdate)         
             current_time = timeutil.now()
             if current_time >= next_time:
               logger.info("Next update time passed, downloading CRL")
             else:
               logger.info("Next update scheduled on %s, not downloading anything" % dpoint.nextUpdate)
               return True, 0
           else:
             logger.info("No previous download recorded, downloading CRL")
         # download CRL
         downloaded = self.__download_crl(url)
         if downloaded is None:
           return False, 0
         # decode it and get the update time
         crl = self.__decode_crl(downloaded)
         if (verification is not None):                    
             verified = crl_verifier.verify_crl(crl, verification)
             if not verified:
                 logger.warning('CRL verification failed')
                 return True, 0
             else:
                 logger.info("CRL verified")
         else:
           logger.info("CRL verification not performed, no certificate provided")
         downloaded_update_time = str(crl.getComponentByName("tbsCertList").getComponentByName("thisUpdate"))
         # if there was new crl issued, commit changes to local copy
         if dpoint.lastUpdated != downloaded_update_time:
             logger.info("New CRL detected, current version: %s, new version: %s",\
                          dpoint.lastUpdated, downloaded_update_time)
             added_certs = dpoint.update_revoked_list(crl)
             logger.info("Added %d new revoked certificate serial numbers" % added_certs)
             if added_certs:
                 self.changed = True
             return True, added_certs
         else:
             logger.info("Downloaded CRL is the same as current, no changes in list of revoked certificates")
             return True, 0