Retour aux mises à jour
New releaseAug 3, 2026

tlsx v1.3.0

Grabber TLS rapide et configurable, axé sur la collecte de données basées sur TLS.

Partager


FonctionnalitésInstallationUtilisationExécution de tlsxRejoindre Discord

Un grabber TLS rapide et configurable axé sur la collecte et l'analyse de données basées sur TLS.

Fonctionnalités

image

  • Connexion TLS rapide et entièrement configurable
  • Modes multiples pour la connexion TLS
  • Plusieurs sondes TLS
  • Repli automatique TLS pour les versions TLS antérieures
  • Connexion TLS pré-handshake (terminaison anticipée)
  • Sélection personnalisable Cipher / SNI / TLS
  • Empreinte TLS JARM/JA3
  • Mauvaise configuration TLS
  • Entrée ASN,CIDR,IP,HOST, et URL
  • Sortie STD IN/OUT et TXT/JSON

Installation

tlsx nécessite Go 1.24 pour être installé correctement. Pour l'installer, exécutez simplement la commande ci-dessous ou téléchargez le binaire pré-compilé depuis la page de release.```console go install github.com/projectdiscovery/tlsx/cmd/tlsx@latest

## Utilisation```console
tlsx -h

Ceci affichera l'aide pour l'outil. Voici tous les commutateurs qu'il prend en charge.```console TLSX is a tls data gathering and analysis toolkit.

Usage: tlsx [flags]

Flags: INPUT: -u, -host string[] target host to scan (-u INPUT1,INPUT2) -l, -list string target list to scan (-l INPUT_FILE) -p, -port string[] target port to connect (default 443)

SCAN-MODE: -sm, -scan-mode string tls connection mode to use (ctls, ztls, openssl, auto) (default "auto") -ps, -pre-handshake enable pre-handshake tls connection (early termination) using ztls -sa, -scan-all-ips scan all ips for a host (default false) -iv, -ip-version string[] ip version to use (4, 6) (default 4)

PROBES: -san display subject alternative names -cn display subject common names -so display subject organization name -tv, -tls-version display used tls version -cipher display used cipher -hash string display certificate fingerprint hashes (md5,sha1,sha256) -jarm display jarm fingerprint hash -ja3 display ja3 fingerprint hash (using ztls) -wc, -wildcard-cert display host with wildcard ssl certificate -tps, -probe-status display tls probe status -ve, -version-enum enumerate and display supported tls versions -ce, -cipher-enum enumerate and display supported cipher -ct, -cipher-type value ciphers types to enumerate. possible values: all/secure/insecure/weak (comma-separated) (default all) -ch, -client-hello include client hello in json output (ztls mode only) -sh, -server-hello include server hello in json output (ztls mode only) -se, -serial display certificate serial number

MISCONFIGURATIONS: -ex, -expired display host with host expired certificate -ss, -self-signed display host with self-signed certificate -mm, -mismatched display host with mismatched certificate -re, -revoked display host with revoked certificate -un, -untrusted display host with untrusted certificate

CONFIGURATIONS: -config string path to the tlsx configuration file -r, -resolvers string[] list of resolvers to use -cc, -cacert string client certificate authority file -ci, -cipher-input string[] ciphers to use with tls connection -sni string[] tls sni hostname to use -rs, -random-sni use random sni when empty -rps, -rev-ptr-sni perform reverse PTR to retrieve SNI from IP -min-version string minimum tls version to accept (ssl30,tls10,tls11,tls12,tls13) -max-version string maximum tls version to accept (ssl30,tls10,tls11,tls12,tls13) -cert, -certificate include certificates in json output (PEM format) -tc, -tls-chain include certificates chain in json output -vc, -verify-cert enable verification of server certificate -ob, -openssl-binary string OpenSSL Binary Path -hf, -hardfail strategy to use if encountered errors while checking revocation status -proxy string socks5 proxy to use for tlsx

OPTIMIZATIONS: -c, -concurrency int number of concurrent threads to process (default 300) -cec, -cipher-concurrency int cipher enum concurrency for each target (default 10) -timeout int tls connection timeout in seconds (default 5) -retry int number of retries to perform for failures (default 3) -delay string duration to wait between each connection per thread (eg: 200ms, 1s)

UPDATE: -up, -update update tlsx to latest version -duc, -disable-update-check disable automatic tlsx update check

OUTPUT: -o, -output string file to write output to -j, -json display output in jsonline format -dns display unique hostname from SSL certificate response -ro, -resp-only display tls response only -silent display silent output -nc, -no-color disable colors in cli output -v, -verbose display verbose output -version display project version

PDCP: -pd, -dashboard upload or view output in the PDCP UI dashboard -pdu, -dashboard-upload string upload tlsx output file (JSONL format) to the PDCP UI dashboard -auth string PDCP API key for authentication -tid, -team-id string upload asset results to a specified team ID -aid, -asset-id string upload new assets to an existing asset ID -aname, -asset-name string asset group name

DEBUG: -health-check, -hc run diagnostic check up

## Utilisation de tlsx en tant que bibliothèque

Des exemples d'utilisation de tlsx en tant que bibliothèque sont fournis dans le dossier [examples](https://github.com/projectdiscovery/tlsx/blob/HEAD/examples/).

## Exécution de tlsx

### Entrée pour tlsx

**tlsx** nécessite **ip** pour établir une connexion TLS et accepte plusieurs formats comme listé ci-dessous :```bash
AS1449 # ASN input
173.0.84.0/24 # CIDR input
93.184.216.34 # IP input
example.com # DNS input
example.com:443 # DNS input with port
https://example.com:443 # URL input port

L'hôte d'entrée peut être fourni en utilisant le flag -host / -u, et plusieurs valeurs peuvent être fournies en utilisant une entrée séparée par des virgules, de même l'entrée fichier est prise en charge en utilisant le flag -list / -l.

Exemple d'entrée d'hôte séparée par des virgules :```console $ tlsx -u 93.184.216.34,example.com,example.com:443,https://example.com:443 -silent

Exemple d'entrée d'hôte basée sur fichier :```console
$ tlsx -list host_list.txt

Entrée du port :

tlsx se connecte sur le port 443 par défaut, qui peut être personnalisé à l'aide de l'option -port / -p. Un ou plusieurs ports peuvent être spécifiés en utilisant une entrée séparée par des virgules ou un fichier délimité par des sauts de ligne contenant la liste des ports auxquels se connecter.

Exemple d'entrée de port séparé par des virgules :``` $ tlsx -u hackerone.com -p 443,8443

Exemple d'entrée de port basée sur fichier :```
$ tlsx -u hackerone.com -p port_list.txt

Remarque :

Lorsque l'hôte d'entrée contient un port, par exemple, 8.8.8.8:443 ou hackerone.com:8443, le port spécifié avec l'hôte sera utilisé pour établir la connexion TLS au lieu du port par défaut ou de celui fourni via le drapeau -port / -p.

Sondage TLS (exécution par défaut)

Cette commande exécute l'outil sur la plage CIDR donnée et renvoie les hôtes qui acceptent une connexion TLS sur le port 443.```console $ echo 173.0.84.0/24 | tlsx


|_ | | / \ / / | | | |_ > < || ||/_/_\ v0.0.1

projectdiscovery.io

[WRN] Use with caution. You are responsible for your actions. [WRN] Developers assume no liability and are not responsible for any misuse or damage.

173.0.84.69:443 173.0.84.67:443 173.0.84.68:443 173.0.84.66:443 173.0.84.76:443 173.0.84.70:443 173.0.84.72:443

### Sonde SAN/CN

Le certificat TLS contient des noms DNS dans les champs **subject alternative name** et **common name** qui peuvent être extraits à l'aide des flags `-san`, `-cn`.```console
$ echo 173.0.84.0/24 | tlsx -san -cn -silent

173.0.84.104:443 [uptycspay.paypal.com]
173.0.84.104:443 [api-3t.paypal.com]
173.0.84.104:443 [api-m.paypal.com]
173.0.84.104:443 [payflowpro.paypal.com]
173.0.84.104:443 [pointofsale-s.paypal.com]
173.0.84.104:443 [svcs.paypal.com]
173.0.84.104:443 [uptycsven.paypal.com]
173.0.84.104:443 [api-aa.paypal.com]
173.0.84.104:443 [pilot-payflowpro.paypal.com]
173.0.84.104:443 [pointofsale.paypal.com]
173.0.84.104:443 [uptycshon.paypal.com]
173.0.84.104:443 [api.paypal.com]
173.0.84.104:443 [adjvendor.paypal.com]
173.0.84.104:443 [zootapi.paypal.com]
173.0.84.104:443 [api-aa-3t.paypal.com]
173.0.84.104:443 [uptycsize.paypal.com]

Pour faciliter l'automatisation, l'option -resp-only peut être utilisée pour lister uniquement les noms DNS dans la sortie CLI.```console $ echo 173.0.84.0/24 | tlsx -san -cn -silent -resp-only

api-aa-3t.paypal.com pilot-payflowpro.paypal.com pointofsale-s.paypal.com uptycshon.paypal.com a.paypal.com adjvendor.paypal.com zootapi.paypal.com api-aa.paypal.com payflowpro.paypal.com pointofsale.paypal.com uptycspay.paypal.com api-3t.paypal.com uptycsize.paypal.com api.paypal.com api-m.paypal.com svcs.paypal.com uptycsven.paypal.com uptycsven.paypal.com a.paypal.com api.paypal.com pointofsale-s.paypal.com pilot-payflowpro.paypal.com

**sous-domaines** obtenus à partir de certificats TLS peuvent être redirigés vers d'autres outils PD pour une inspection plus approfondie, voici un exemple de redirection de sous-domaines TLS vers **[dnsx](https://github.com/projectdiscovery/dnsx)** pour filtrer les sous-domaines passifs et les passer à **[httpx](https://github.com/projectdiscovery/httpx)** pour lister les hôtes exécutant des services web actifs.```console
$ echo 173.0.84.0/24 | tlsx -san -cn -silent -resp-only | dnsx -silent | httpx

    __    __  __       _  __
   / /_  / /_/ /_____ | |/ /
  / __ \/ __/ __/ __ \|   /
 / / / / /_/ /_/ /_/ /   |
/_/ /_/\__/\__/ .___/_/|_|
             /_/              v1.2.2

    projectdiscovery.io

Use with caution. You are responsible for your actions.
Developers assume no liability and are not responsible for any misuse or damage.
https://api-m.paypal.com
https://uptycsize.paypal.com
https://api.paypal.com
https://uptycspay.paypal.com
https://svcs.paypal.com
https://adjvendor.paypal.com
https://uptycshap.paypal.com
https://uptycshon.paypal.com
https://pilot-payflowpro.paypal.com
https://slc-a-origin-pointofsale.paypal.com
https://uptycsven.paypal.com
https://api-aa.paypal.com
https://api-aa-3t.paypal.com
https://uptycsbrt.paypal.com
https://payflowpro.paypal.com
http://pointofsale-s.paypal.com
http://slc-b-origin-pointofsale.paypal.com
http://api-3t.paypal.com
http://zootapi.paypal.com
http://pointofsale.paypal.com

Sonde TLS / Cipher```console

$ subfinder -d hackerone.com | tlsx -tls-version -cipher

mta-sts.hackerone.com:443 [TLS1.3] [TLS_AES_128_GCM_SHA256] hackerone.com:443 [TLS1.3] [TLS_AES_128_GCM_SHA256] api.hackerone.com:443 [TLS1.3] [TLS_AES_128_GCM_SHA256] mta-sts.managed.hackerone.com:443 [TLS1.3] [TLS_AES_128_GCM_SHA256] mta-sts.forwarding.hackerone.com:443 [TLS1.3] [TLS_AES_128_GCM_SHA256] www.hackerone.com:443 [TLS1.3] [TLS_AES_128_GCM_SHA256] support.hackerone.com:443 [TLS1.2] [TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256]

# Mauvaise configuration TLS

### Certificat expiré / auto-signé / non conforme / révoqué / non approuvé

Une liste d'hôtes peut être fournie à tlsx pour détecter les certificats **expirés / auto-signés / non conformes / révoqués / non approuvés**.```console
$ tlsx -l hosts.txt -expired -self-signed -mismatched -revoked -untrusted
  

  _____ _    _____  __
 |_   _| |  / __\ \/ /
   | | | |__\__ \>  < 
   |_| |____|___/_/\_\  v0.0.1

    projectdiscovery.io

[WRN] Use with caution. You are responsible for your actions.
[WRN] Developers assume no liability and are not responsible for any misuse or damage.

wrong.host.badssl.com:443 [mismatched]
self-signed.badssl.com:443 [self-signed]
expired.badssl.com:443 [expired]
revoked.badssl.com:443 [revoked]
untrusted-root.badssl.com:443 [untrusted]

JARM Empreinte TLS```console

$ echo hackerone.com | tlsx -jarm -silent

hackerone.com:443 [29d3dd00029d29d00042d43d00041d5de67cc9954cc85372523050f20b5007]

### [JA3](https://github.com/salesforce/ja3) Empreinte TLS```console
$ echo hackerone.com | tlsx -ja3 -silent

hackerone.com:443 [20c9baf81bfe96ff89722899e75d0190]

Sortie JSON

tlsx prend en charge plusieurs indicateurs de sonde pour interroger des données spécifiques, mais toutes les informations sont toujours disponibles au format JSON. Pour l'automatisation et le post-traitement, l'utilisation de la sortie avec -json est l'option la plus pratique.```console echo example.com | tlsx -json -silent | jq .

.```json
{
  "timestamp": "2022-08-22T21:22:59.799053+05:30",
  "host": "example.com",
  "ip": "93.184.216.34",
  "port": "443",
  "probe_status": true,
  "tls_version": "tls13",
  "cipher": "TLS_AES_256_GCM_SHA384",
  "not_before": "2022-03-14T00:00:00Z",
  "not_after": "2023-03-14T23:59:59Z",
  "subject_dn": "CN=www.example.org, O=Internet Corporation for Assigned Names and Numbers, L=Los Angeles, ST=California, C=US",
  "subject_cn": "www.example.org",
  "subject_org": [
    "Internet Corporation for Assigned Names and Numbers"
  ],
  "subject_an": [
    "www.example.org",
    "example.net",
    "example.edu",
    "example.com",
    "example.org",
    "www.example.com",
    "www.example.edu",
    "www.example.net"
  ],
  "issuer_dn": "CN=DigiCert TLS RSA SHA256 2020 CA1, O=DigiCert Inc, C=US",
  "issuer_cn": "DigiCert TLS RSA SHA256 2020 CA1",
  "issuer_org": [
    "DigiCert Inc"
  ],
  "fingerprint_hash": {
    "md5": "c5208a47259d540a6e3404dddb85af91",
    "sha1": "df81dfa6b61eafdffffe1a250240db5d2e6cee25",
    "sha256": "7f2fe8d6b18e9a47839256cd97938daa70e8515750298ddba2f3f4b8440113fc"
  },
  "tls_connection": "ctls",
  "sni": "example.com"
}

Intégration du tableau de bord PDCP

tlsx prend en charge le téléchargement des résultats de scan vers le tableau de bord de la ProjectDiscovery Cloud Platform (PDCP) pour visualisation et analyse.

Téléchargement des résultats en temps réel

Activez le téléchargement vers le tableau de bord pour télécharger automatiquement les résultats dès leur découverte :```console $ tlsx -u example.com -pd -json

Les résultats seront automatiquement téléversés vers PDCP et vous recevrez une URL de tableau de bord pour les visualiser.

#### Téléversement d'un fichier existant

Téléversez un fichier JSONL préalablement enregistré vers PDCP :```console
$ tlsx -pdu results.jsonl -tid your-team-id -aname "My Scan"

Options de configuration

  • -pd, --dashboard: Activer le téléchargement en temps réel vers le tableau de bord PDCP
  • -pdu, --dashboard-upload <file>: Télécharger un fichier JSONL spécifique vers PDCP
  • -auth <key>: Clé API PDCP (peut également être définie via l'environnement ou le gestionnaire d'identifiants)
  • -tid, --team-id <id>: Spécifier l'ID d'équipe pour les téléchargements
  • -aid, --asset-id <id>: Télécharger vers un ID d'actif existant
  • -aname, --asset-name <name>: Définir un nom personnalisé pour le groupe d'actifs

Exemple avec toutes les options :```console $ tlsx -u example.com -pd -json -tid team123 -aname "Production Scan"

## Configuration

### Mode de Scan

tlsx propose plusieurs modes pour établir une connexion TLS -

- `auto` (retour automatique vers d'autres modes en cas d'échec) - **par défaut**
- `ctls` (**[crypto/tls](https://github.com/golang/go/blob/master/src/crypto/tls/tls.go)**)
- `ztls` (**[zcrypto/tls](https://github.com/zmap/zcrypto)**)
- `openssl` (**[openssl](https://github.com/openssl/openssl)**)

Quelques points concernant le mode / bibliothèque spécifique sont mis en évidence dans les [discussions liées](https://github.com/projectdiscovery/tlsx/discussions/2). Le mode `auto` est pris en charge pour garantir une couverture maximale et analyse les hôtes exécutant une version obsolète de TLS en réessayant la connexion avec les modes `ztls` et `openssl` en cas d'erreur de connexion.

Un exemple d'utilisation du mode `ztls` pour analyser un site web utilisant une version ancienne / obsolète de TLS.```console
$ echo tls-v1-0.badssl.com | tlsx -port 1010 -sm ztls
  

  _____ _    _____  __
 |_   _| |  / __\ \/ /
   | | | |__\__ \>  < 
   |_| |____|___/_/\_\  v0.0.1

    projectdiscovery.io

[WRN] Use with caution. You are responsible for your actions.
[WRN] Developers assume no liability and are not responsible for any misuse or damage.

tls-v1-0.badssl.com:1010

OpenSSL

Pour utiliser le mode de connexion openssl, vous devez avoir openssl installé sur votre système. La plupart des systèmes modernes sont livrés avec openssl préinstallé, mais s'il n'est pas présent sur votre système, vous pouvez l'installer manuellement. Vous pouvez vérifier si openssl est installé en exécutant la commande openssl version. Si openssl est installé, cette commande affichera le numéro de version.

Pré-poignée de main (terminaison précoce)

tlsx prend en charge la terminaison précoce de la connexion SSL, ce qui permet une numérisation plus rapide et moins de requêtes de connexion (déconnexion après la collecte des données TLS serverhello et du certificat).

Pour plus de détails, veuillez vous référer à Hunting-Certificates-And-Servers par @erbbysam

Un exemple d'utilisation du mode -pre-handshake :

tlsx -pre-handshake -t 104.16.132.229 -p 443

```console $ tlsx -u example.com -pre-handshake

|_ | | / \ / / | | | |_ > < || ||/_/_\ v0.0.1

projectdiscovery.io

[WRN] Use with caution. You are responsible for your actions. [WRN] Developers assume no liability and are not responsible for any misuse or damage.

example.com:443

> **Remarque** :

> Le mode **pre-handshake** utilise `ztls` (**zcrypto/tls**) ce qui signifie également que la prise en charge est limitée à `TLS v1.2` car `TLS v1.3` n'est pas supporté par la bibliothèque `ztls`.

</table>
</tr>
</td>

### Version TLS

Les versions **Minimale** et **Maximale** de TLS peuvent être spécifiées à l'aide des indicateurs `-min-version` et `-max-version` ; par défaut, ces valeurs sont définies par la bibliothèque utilisée sous-jacente.

Les valeurs acceptables pour la version TLS sont spécifiées ci-dessous.

- `ssl30`
- `tls10`
- `tls11`
- `tls12`
- `tls13`

Voici un exemple utilisant `max-version` pour scanner les hôtes supportant une version plus ancienne de TLS, c'est-à-dire **TLS v1.0**```console
$ tlsx -u example.com -max-version tls10
  

  _____ _    _____  __
 |_   _| |  / __\ \/ /
   | | | |__\__ \>  < 
   |_| |____|___/_/\_\  v0.0.1

    projectdiscovery.io

[WRN] Use with caution. You are responsible for your actions.
[WRN] Developers assume no liability and are not responsible for any misuse or damage.
example.com:443

Chiffrement personnalisé

Un chiffrement personnalisé pris en charge peut être fourni en utilisant le drapeau -cipher-input / -ci. La liste des chiffrements pris en charge pour chaque mode est disponible sur la page wiki.```console $ tlsx -u example.com -ci TLS_AES_256_GCM_SHA384 -cipher

.```console
$ tlsx -u example.com -ci cipher_list.txt -cipher

Remerciements

Ce programme utilise optionnellement :

  • zcrypto bibliothèque de l'équipe zmap.
  • cfssl bibliothèque de l'équipe cloudflare
  • données de chiffrement de ciphersuite.info pour la classification des suites de chiffrement.

tlsx est fait avec ❤️ par l'équipe projectdiscovery et distribué sous licence MIT.

Rejoindre Discord

Streaming des logs de transparence des certificats (CT)

tlsx peut fonctionner dans un mode fire-hose qui diffuse en continu les certificats TLS nouvellement émis de l'écosystème public de transparence des certificats, fournissant un flux quasi en temps réel de noms d'hôtes et de métadonnées.

Activer le mode logs CT via l'option -ctl (par défaut lorsqu'aucune entrée n'est fournie) :```bash tlsx -ctl -silent | jq .subject_an

#### Décalages de départ

L'outil propose trois comportements de démarrage mutuellement exclusifs contrôlés par les indicateurs suivants :

| Drapeau | Comportement |
|------|-----------|
| _default_ | Démarrer **maintenant** (taille de l'arbre au démarrage) – seuls les certificats futurs sont diffusés en continu |
| `-cb, --ctl-beginning` | Démarrer à partir de l'index **0** pour chaque journal (relecture historique complète) |
| `-cti, --ctl-index <log>=<n>` | Index personnalisé par journal (répétable). Définit l'index de départ à _n_ pour l'URL/ID de journal spécifié. Exemple : `--ctl-index https://ct.googleapis.com/logs/argon2023=123456` |```bash
# Replay the entire history
$ tlsx -ctl -cb -silent > all_certs.jsonl

# Resume at custom positions for two logs
$ tlsx -ctl -cti https://ct.googleapis.com/logs/argon2023=987654 -cti cloudflare-nimbus2024=543210 \
      -silent | jq -r .ct_source

Par défaut, les doublons sont filtrés à l'aide d'un grand filtre de Bloom inverse. Passez -v pour observer les statistiques détaillées.

Catégories