↓ download on github


testssl.sh is a free command line tool which checks a server’s service on any port for the support of TLS/SSL ciphers, protocols as well as some cryptographic flaws.

Key features

  • Clear output: you can tell easily whether anything is good or bad
  • Ease of installation: It works for Linux, OSX/Darwin, FreeBSD, NetBSD, OpenBSD (needs bash) and MSYS2/Cygwin out of the box: no need to install or to configure something. No gems, CPAN, pip or the like/
  • Flexibility: You can test any SSL/TLS enabled and STARTTLS service, not only webservers at port 443
  • Toolbox: Several command line options help you to run YOUR test and configure YOUR output
  • Reliability: features are tested thoroughly
  • Verbosity: If a particular check cannot be performed because of a missing capability on your client side, you’ll get a warning
  • Privacy: It’s only you who sees the result, not a third party
  • Freedom: It’s 100% open source. You can look at the code, see what’s going on and you can change it.
  • Heck, even the development is open (github)


You can download testssl.sh by cloning this git repository:

git clone &mdash;depth 1 <a href="https://github.com/drwetter/testssl.sh.git" class='spip_url spip_out auto' rel='nofollow external'><span class="base64" title="aHR0cHM6Ly9naXRodWIuY29tL2Ryd2V0dGVyL3Rlc3Rzc2wuc2guZ2l0"></span></a>

Or help yourself downloading the ZIP archive https://github.com/drwetter/testssl.sh/archive/2.9dev.zip. testssl.sh --help will give you some help upfront. More help: see doc directory with man pages. Older sample runs are at https://testssl.sh/.


Here in the 2.9dev branch you find the development version of the software -- with new features and maybe some bugs — albeit we try our best before committing to test changes. Be aware that we also change the output or command line.

For the previous stable version please see https://testssl.sh/ "Go to the site with the stable version" or download the interim release 2.9.5 from here https://github.com/drwetter/testssl.sh/tree/2.9.5 which is is the successor of 2.8 and stable for day-to-day work.


testssl.sh is working on every Linux/BSD distribution out of the box. Since 2.9dev most of the limitations of disabled features from the openssl client are gone due to bash-socket-based checks. As a result you can also use e.g. LibreSSL. testssl.sh also works on other unixoid system out of the box, supposed they have /bin/bash >= version 3.2 and standard tools like sed and awk installed. System V needs to have GNU grep installed. MacOS X and Windows (using MSYS2 or cygwin) work too. OpenSSL version version >= 1.0.2 is recommended for better LOGJAM checks and to display bit strengths for key exchanges.

Update notification here or @ https://twitter.com/drwetter.

Features implemented in Readme.md#devel

  • Using bash sockets where ever possible —> better detection of ciphers, independent on the openssl version used.
  • Testing 364 default ciphers (testssl.sh -e/-E) with a mixture of sockets and openssl. Same speed as with openssl only but additional ciphers such as post-quantum ciphers, new CHAHA20/POLY1305, CamelliaGCM etc.
  • Further tests via TLS sockets and improvements (handshake parsing, completeness, robustness),
  • TLS 1.2 protocol check via socket in production
  • Finding more TLS extensions via sockets
  • TLS Supported Groups Registry (RFC 7919), key shares extension
  • Non-flat JSON support
  • File output (CSV, JSON flat, JSON non-flat) supports a minimum severity level (only above supplied level there will be output)
  • Support of supplying timeout value for openssl connect — useful for batch/mass scanning
  • Parallel mass testing (!)
  • File input for serial or parallel mass testing can be also in nmap grep(p)able (-oG) format
  • Native HTML support instead going through ’aha’
  • Better formatting of output (indentation)
  • Choice showing the RFC naming scheme only
  • LUCKY13 and SWEET32 checks
  • Check for vulnerability to Bleichenbacher attacks
  • Ticketbleed check
  • Decoding of unencrypted BIG IP cookies
  • LOGJAM: now checking also for known DH parameters
  • Check for CAA RR
  • Check for OCSP must staple
  • Check for Certificate Transparency
  • Expect-CT Header Detection
  • Check for session resumption (Ticket, ID)
  • TLS Robustness check (GREASE)
  • Postgres und MySQL STARTTLS support, MongoDB support
  • Decodes BIG IP F5 Cookie
  • Fully OpenBSD and LibreSSL support
  • Missing SAN warning
  • Man page
  • Better error msg suppression (not fully installed OpenSSL)
  • DNS over Proxy and other proxy improvements
  • Better JSON output: renamed IDs and findings shorter/better parsable
  • JSON output now valid also for non-responsing servers
  • Added support for private CAs
  • Exit code now 0 for running without error
  • ROBOT check
  • Better extension support
  • Better OpenSSL 1.1.1 support
  • Supports latest and greatest version of TLS 1.3, shows drafts supported

Further features planned in 2.9dev



Contributions, feedback, bug reports are welcome! For contributions please note: One patch per feature — bug fix/improvement. Please test your changes thouroughly as reliability is important for this project.

There’s a https://github.com/drwetter/testssl.sh/wiki/Coding-Style.

Please file bug reports @ https://github.com/drwetter/testssl.sh/issues.


For a start see the wiki. Help is needed here. Will Hunt provides a good https://www.4armed.com/blog/doing-your-own-ssl-tls-testing/ for version 2.8, including useful background info.

Bug reports

Please file bugs in the issue tracker. Do not forget to provide detailed information, see https://github.com/drwetter/testssl.sh/wiki/Bug-reporting. Nobody can read your thoughts — yet. And only agencies your screen ;-)

External/related projects

Please address questions not specifically to the code of testssl.sh to the respective projects

Cool web frontend

Mass scanner w parallel scans and elastic searching the results

A ready-to-go docker image is at:

Privacy checker using testssl.sh

Brew package

Tools Cryptography