Skip to main content

JA3 FINGERPRINT

Counts TLS handshakes by JA3 fingerprint, keyed by the MD5 hash of the ClientHello (JA3) or ServerHello (JA3S) fields.

PropertyValue
GUID{E8D5E68F-B320-49F3-C83D-66751C3B485F}
LayerL7 Application
InputPackets
Key typeMD5 hex string (32 uppercase chars)
ImplementationLua — jahash.lua (apps/analyzers/tls-print)
Trisul Apptls-print (install from Trisul Apps)
Bucket / Topper60 s / 300 s
Enabled by defaultYes, after the app is installed

What it measures​

  • You must set //Reassembly/TCPReassembly/Applications/EnableSSLRecordExtraction to true in the probe config. Otherwise the script does not load.
  • The script reads TLS:RECORD attributes from TCP reassembly. It parses only handshake records (type 22). It skips a record when the handshake length does not match the record length.
  • ClientHello (handshake type 1) builds the JA3 string version,ciphers,extensions,curves,point-formats. Values are decimal and joined with -.
  • ServerHello (handshake type 2) builds the JA3S string version,cipher,extensions into the same group. Client and server hashes share this group. Meters 1 and 2 tell them apart.
  • GREASE values are removed from ciphers, extensions and curves. Extension 21 (padding) is left out. A hello with no extensions is not counted.
  • Each hello adds 1 to Hits and 1 to Client Hits or Server Hits. The flow is tagged with the first 6 characters of the hash.
  • Edges: hash ↔ SNI hostname (or No-SNI-Ext as a flow edge) and flow → hash.
  • Set LogHashes=true in config/trisulnsm_tls-fingerprint.lua to print each flow and fingerprint to the log.

Keys​

One key is the MD5 of the JA3 or JA3S string, as 32 uppercase hex characters (T.util.bin2hex).

The script looks up each hash in tls-fingerprints.json. It searches //App/DataDirectory/plugins/ first, then the app directory. The file stores hashes in lowercase. The script converts them to uppercase when it loads, so they match the keys. A hit sets that entry's desc as the label and the JA3 string as the key description, and adds a hash → client name edge. The stock file has 680 entries covering 608 distinct hashes. Where a hash is listed more than once, the last entry wins. Ten entries are JA3S server prints, with labels that begin JA3S:. All other entries are client prints.

KeyMeaning
93948924E733E9DF15A3BB44404CD909JA3 of Adium 1.5.10. Label Adium 1.5.10 (a) from the stock file, which lists it as 93948924e733e9df15a3bb44404cd909.
<32 uppercase hex chars>Any other client (JA3) or server (JA3S) print

Special keys​

KeyMeaning
SYS:GROUP_TOTALSSum of every update made to this group in the interval. Hits in the totals is the number of ClientHello plus ServerHello records fingerprinted.

Meter list​

IDNameTypeUnitsTopBottomDescription
0hitsVT_COUNTERhits2040Short name Hits. 1 per ClientHello or ServerHello fingerprinted.
1clt-hitsVT_COUNTERhits2040Short name Client Hits. 1 per ClientHello (JA3).
2svr-hitsVT_COUNTERhits2040Short name Server Hits. 1 per ServerHello (JA3S).
3uniqsVT_GAUGEUniques2020Reserved cardinality slot. Not populated.
4uniqsVT_GAUGEUniques2020Reserved cardinality slot. Not populated.