it
This commit is contained in:
		
							parent
							
								
									39ce0e9d11
								
							
						
					
					
						commit
						d7adf9ad8b
					
				@ -52,6 +52,39 @@ class CrtShProvider(BaseProvider):
 | 
				
			|||||||
        """
 | 
					        """
 | 
				
			||||||
        return True
 | 
					        return True
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    def _parse_issuer_organization(self, issuer_dn: str) -> str:
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        Parse the issuer Distinguished Name to extract just the organization name.
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        Args:
 | 
				
			||||||
 | 
					            issuer_dn: Full issuer DN string (e.g., "C=US, O=Let's Encrypt, CN=R11")
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					        Returns:
 | 
				
			||||||
 | 
					            Organization name (e.g., "Let's Encrypt") or original string if parsing fails
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        if not issuer_dn:
 | 
				
			||||||
 | 
					            return issuer_dn
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        try:
 | 
				
			||||||
 | 
					            # Split by comma and look for O= component
 | 
				
			||||||
 | 
					            components = [comp.strip() for comp in issuer_dn.split(',')]
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            for component in components:
 | 
				
			||||||
 | 
					                if component.startswith('O='):
 | 
				
			||||||
 | 
					                    # Extract the value after O=
 | 
				
			||||||
 | 
					                    org_name = component[2:].strip()
 | 
				
			||||||
 | 
					                    # Remove quotes if present
 | 
				
			||||||
 | 
					                    if org_name.startswith('"') and org_name.endswith('"'):
 | 
				
			||||||
 | 
					                        org_name = org_name[1:-1]
 | 
				
			||||||
 | 
					                    return org_name
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            # If no O= component found, return the original string
 | 
				
			||||||
 | 
					            return issuer_dn
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					        except Exception as e:
 | 
				
			||||||
 | 
					            self.logger.logger.debug(f"Failed to parse issuer DN '{issuer_dn}': {e}")
 | 
				
			||||||
 | 
					            return issuer_dn
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    def _parse_certificate_date(self, date_string: str) -> datetime:
 | 
					    def _parse_certificate_date(self, date_string: str) -> datetime:
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        Parse certificate date from crt.sh format.
 | 
					        Parse certificate date from crt.sh format.
 | 
				
			||||||
@ -129,10 +162,15 @@ class CrtShProvider(BaseProvider):
 | 
				
			|||||||
        Returns:
 | 
					        Returns:
 | 
				
			||||||
            Comprehensive certificate metadata dictionary
 | 
					            Comprehensive certificate metadata dictionary
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
 | 
					        # Parse the issuer name to get just the organization
 | 
				
			||||||
 | 
					        raw_issuer_name = cert_data.get('issuer_name', '')
 | 
				
			||||||
 | 
					        parsed_issuer_name = self._parse_issuer_organization(raw_issuer_name)
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        metadata = {
 | 
					        metadata = {
 | 
				
			||||||
            'certificate_id': cert_data.get('id'),
 | 
					            'certificate_id': cert_data.get('id'),
 | 
				
			||||||
            'serial_number': cert_data.get('serial_number'),
 | 
					            'serial_number': cert_data.get('serial_number'),
 | 
				
			||||||
            'issuer_name': cert_data.get('issuer_name'),
 | 
					            'issuer_name': parsed_issuer_name,  # Use parsed organization name
 | 
				
			||||||
 | 
					            #'issuer_name_full': raw_issuer_name,  # deliberately left out, because its not useful in most cases
 | 
				
			||||||
            'issuer_ca_id': cert_data.get('issuer_ca_id'),
 | 
					            'issuer_ca_id': cert_data.get('issuer_ca_id'),
 | 
				
			||||||
            'common_name': cert_data.get('common_name'),
 | 
					            'common_name': cert_data.get('common_name'),
 | 
				
			||||||
            'not_before': cert_data.get('not_before'),
 | 
					            'not_before': cert_data.get('not_before'),
 | 
				
			||||||
@ -339,7 +377,7 @@ class CrtShProvider(BaseProvider):
 | 
				
			|||||||
        expired_count = len(certificates) - valid_count
 | 
					        expired_count = len(certificates) - valid_count
 | 
				
			||||||
        expires_soon_count = sum(1 for cert in certificates if cert.get('expires_soon'))
 | 
					        expires_soon_count = sum(1 for cert in certificates if cert.get('expires_soon'))
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        # Get unique issuers
 | 
					        # Get unique issuers (using parsed organization names)
 | 
				
			||||||
        unique_issuers = list(set(cert.get('issuer_name') for cert in certificates if cert.get('issuer_name')))
 | 
					        unique_issuers = list(set(cert.get('issuer_name') for cert in certificates if cert.get('issuer_name')))
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        # Find the most recent certificate
 | 
					        # Find the most recent certificate
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user