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