X.509 Certificates

June 18, 2026 ยท View on GitHub

FAN/1 X.509 fingerprints are passive fingerprints extracted from TLS Certificate handshake messages in packet captures. They complement TLS ClientHello and ServerHello fingerprints by describing the certificate generation profile visible on the wire.

x509|server|idx=<chain_index>|ver=<x509_version>|serial_len=<serial_byte_length>|sig=<outer_signature_algorithm_oid>|tbs_sig=<tbs_signature_algorithm_oid>|issuer=<issuer_name_oid_values>|subject=<subject_name_oid_values>|valid_days=<validity_window_days>|spki_alg=<subject_public_key_algorithm_oid>|spki_param=<algorithm_parameter_oid_or_der>|pk_bits=<subject_public_key_bit_string_size>|san=<subject_alt_names>|ku=<key_usage_bits>|eku=<extended_key_usage_oids>|bc=<basic_constraints>|ski=<subject_key_identifier_shape>|aki=<authority_key_identifier_shape>|pol=<certificate_policy_oids>|aia=<authority_info_access_shape>|crldp=<crl_distribution_point_shape>|nc=<name_constraints_shape>|ext=<critical_flag_and_extension_oid_order>

Fields

FieldMeaning
x509Protocol namespace.
serverCertificate sender role currently emitted by passive TLS parsing.
idxZero-based certificate index in the observed TLS certificate list.
verX.509 version number, usually 3.
serial_lenLength of the encoded serial number after leading zero stripping.
sigOuter certificate signature algorithm OID.
tbs_sigTBSCertificate signature algorithm OID.
issuerIssuer distinguished-name attributes as oid=value pairs in DER order.
subjectSubject distinguished-name attributes as oid=value pairs in DER order.
valid_daysNumber of days between notBefore and notAfter when both times parse.
spki_algSubjectPublicKeyInfo algorithm OID, such as RSA or EC public key.
spki_paramSubjectPublicKeyInfo parameter OID or DER hex value when present.
pk_bitsSize of the SubjectPublicKey BIT STRING payload in bits.
sanDecoded DNS, IP, email, URI, and OID Subject Alternative Names.
kuRaw Key Usage extension bytes in hexadecimal.
ekuExtended Key Usage OIDs joined with -.
bcBasic Constraints summary, including CA flag and optional path length.
skiShort SHA-256-derived token over Subject Key Identifier extension content.
akiShort SHA-256-derived token over Authority Key Identifier extension content.
polCertificate policy OIDs joined with -.
aiaShort SHA-256-derived token over Authority Information Access content.
crldpShort SHA-256-derived token over CRL Distribution Points content.
ncShort SHA-256-derived token over Name Constraints content.
extExtension layout as critical_flag:oid entries in certificate order.

Rationale

Raw certificate hashes identify an individual certificate exactly, but they are poor similarity features for regenerated certificates. The FAN/1 X.509 feature string keeps generation-oriented parameters: OIDs, distinguished-name layout, public-key algorithm parameters, SAN shape, validity duration, and extension profile. These fields can help cluster certificates issued by the same CA profile, management appliance, malware kit, interception product, or automated certificate generator even when serial numbers, key material, and dates change.

Passive Extraction Notes

fanfp.py parses TLS Certificate handshake bodies from TCP payloads. It supports classic TLS certificate lists and TLS 1.3 certificate entries with per-certificate extensions. Each certificate in the list is emitted as a separate JSON object with protocol set to x509; the frame and flow fields point back to the packet where the certificate was observed.