# TLS Cipher-Suite Simulator > See which TLS version, cipher and group browsers, Android, Java and OpenSSL get from your server. 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. Part of usefulweb.site (https://usefulweb.site/). Results are deterministic calculations from the inputs and the listed assumptions; the API returns exactly what the web page shows. ## Use it - Human interface: https://tlsciphersuitesimulator.usefulweb.site/ (interactive tool at https://tlsciphersuitesimulator.usefulweb.site/tool) - JSON API: POST https://tlsciphersuitesimulator.usefulweb.site/api/v1/calculate with a JSON object of inputs (schema: https://tlsciphersuitesimulator.usefulweb.site/api/v1/tool) - OpenAPI: https://tlsciphersuitesimulator.usefulweb.site/openapi.json - MCP (Streamable HTTP): https://tlsciphersuitesimulator.usefulweb.site/mcp - tool `tls_cipher_suite_simulator` ## Inputs - serverPreset (select): Server configuration - customSuites (textarea): Custom cipher suites (in server preference order) - 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". - customProtocols (multiselect): Custom: enabled protocol versions - customGroups (text): Custom: key-exchange groups - Curve/group names in preference order, e.g. X25519MLKEM768, X25519, prime256v1, secp384r1, ffdhe2048. - certificate (select): Server certificate - rsaBits (integer): RSA key size - dhBits (integer): DHE parameter size - Optional. Defaults to the preset value (old: 1024, intermediate: 2048) or 2048 for custom lists. - order (select): Cipher order - clients (multiselect): Clients to simulate - Leave empty to simulate all clients. ## Method - 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. ## Limits - Simulation from recorded and documented data. Test your real server with a live scanner before relying on it.