Cryptography & security tools

TLS Cipher-Suite Simulator

See which TLS version, cipher and group browsers, Android, Java and OpenSSL get from your server.

OpenSSL names (ECDHE-RSA-AES128-GCM-SHA256), IANA names (TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) or hex codes (0xC02F), separated by colons, commas or new lines. OpenSSL keywords like HIGH or !aNULL are not expanded. Used only with "Custom cipher list".

Custom: enabled protocol versions

Curve/group names in preference order, e.g. X25519MLKEM768, X25519, prime256v1, secp384r1, ffdhe2048.

bits
bits

Optional. Defaults to the preset value (old: 1024, intermediate: 2048) or 2048 for custom lists.

Clients to simulate

Leave empty to simulate all clients.

Try an example: Mozilla intermediate against all clients · Mozilla modern (TLS 1.3 only) · Mozilla old with RSA certificate · Custom OpenSSL list without ECDHE, server order

How it works

Pick a Mozilla server preset (modern, intermediate, old) or paste your own cipher list in OpenSSL or IANA names, and see what 34 recorded clients (browsers, Android, Java, OpenSSL, plus curl) would negotiate: protocol version, cipher suite, key-exchange group, signature algorithm, forward secrecy and AEAD, or why the handshake fails. Includes an IANA ↔ OpenSSL name table and a configuration grade. Offline simulation from documented data, no connection is made.

  • Client data: the ClientHello bytes SSL Labs records for its handshake simulation (cipher suites in order, supported_versions, supported_groups, key_share, signature_algorithms), decoded by our own parser, plus SSL Labs’ DH-size limits. GREASE values and pre-standard TLS 1.3 draft versions (e.g. the draft-28 version sent by Firefox 62) are ignored. curl profiles reuse the default hello of the OpenSSL version curl is linked against (an approximation: curl distributions may set their own cipher lists).
  • Server data: Mozilla Server Side TLS guidelines 6.0 (modern, intermediate) and 5.7 (old, removed from 6.0): protocols, cipher suites, TLS 1.3 suites, curves, certificate types and DH size. Custom lists accept OpenSSL names, IANA names or hex codes.
  • Negotiation follows OpenSSL server behaviour: the highest common protocol version wins; TLS 1.3 chooses a shared suite and group (a missing key share costs a HelloRetryRequest) and needs ecdsa_secp256r1_sha256 or rsa_pss_rsae_* signatures. TLS ≤ 1.2 picks the first shared suite in client order (or server order if enabled) whose authentication matches the certificate and whose key exchange is possible (ECDHE needs a shared curve). Clients that reject large or small DH groups fail like they do in reality.
  • Grade: our own simple scale (A+ to F), not the SSL Labs rating: SSL 3.0, RC4, export, NULL, anonymous or DES suites → F; 3DES → C; TLS 1.0/1.1 or static RSA → B; CBC suites → A-; no TLS 1.3 → A.
  • Limitations: no real network connection is made; extensions such as ALPN, session resumption, OCSP stapling, Encrypted Client Hello and certificate chain validation are not simulated; client behaviour can differ by OS build and configuration.

Simulation from recorded and documented data. Test your real server with a live scanner before relying on it.

Sources

For scripts and AI agents

  • JSON API: POST https://tlsciphersuitesimulator.usefulweb.site/api/v1/calculate (same calculation as this page)
  • Interface description: OpenAPI 3.1 · AI guide: llms.txt
  • MCP server (Streamable HTTP): https://tlsciphersuitesimulator.usefulweb.site/mcp · tool name tls_cipher_suite_simulator
Example request
curl -s -X POST https://tlsciphersuitesimulator.usefulweb.site/api/v1/calculate \
  -H 'content-type: application/json' \
  -d '{"serverPreset":"intermediate"}'

Related tools

Feedback