2016-11-03 13:36:55 +01:00
## Intro
2017-05-17 18:56:07 +02:00
[![Build Status ](https://travis-ci.org/drwetter/testssl.sh.svg?branch=master )](https://travis-ci.org/drwetter/testssl.sh)
2016-11-03 13:36:55 +01:00
[![Gitter ](https://badges.gitter.im/Join%20Chat.svg )](https://gitter.im/drwetter/testssl.sh?utm_source=badge& utm_medium=badge& utm_campaign=pr-badge& utm_content=badge)
`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
2018-02-19 11:55:12 +01:00
* 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/
2016-11-03 13:36:55 +01:00
* 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)
2018-10-15 12:27:57 +02:00
#### License
This software is free. You can use it under the terms of GPLv2, see LICENSE.
In addition starting from version 3.0rc1 if you're offering it as a public
and / or paid service you need to mention to your audience that you're using
this program and where to get this program from.
2017-07-13 13:55:22 +02:00
#### Installation
You can download testssl.sh by cloning this git repository:
2017-09-19 17:34:22 +02:00
git clone --depth 1 https://github.com/drwetter/testssl.sh.git
2017-07-13 13:55:22 +02:00
2018-02-19 11:55:12 +01:00
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/.
2017-07-13 13:55:22 +02:00
2016-11-03 13:36:55 +01:00
#### Status
2016-11-05 12:39:05 +01:00
Here in the _2.9dev branch you find the development version_ of the software
2017-09-19 17:34:22 +02:00
-- with new features and maybe some bugs -- albeit we try our best before
2018-02-19 11:55:12 +01:00
committing to test changes. Be aware that we also change the output or command
line.
For the previous stable version please see [testssl.sh](https://testssl.sh/
"Go to the site with the stable version") or
download the interim release 2.9.5 from here [2.9.5 ](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.
2016-11-03 13:36:55 +01:00
#### Compatibility
2018-02-19 11:55:12 +01:00
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.
2016-11-03 13:36:55 +01:00
Update notification here or @ [twitter ](https://twitter.com/drwetter ).
2016-11-05 12:41:05 +01:00
#### Features implemented in [2.9dev](Readme.md#devel)
2017-09-27 09:07:21 +02:00
* Using bash sockets where ever possible --> better detection of ciphers, independent on the openssl version used.
2017-11-14 13:52:13 +01:00
* 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
2017-03-19 09:36:19 +01:00
* Finding more TLS extensions via sockets
2016-11-21 08:57:50 +01:00
* TLS Supported Groups Registry (RFC 7919), key shares extension
2017-03-19 09:36:19 +01:00
* 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)
2017-09-19 17:34:22 +02:00
* Support of supplying timeout value for ``openssl connect`` -- useful for batch/mass scanning
2017-09-27 09:07:21 +02:00
* Parallel mass testing (!)
* File input for serial or parallel mass testing can be also in nmap grep(p)able (-oG) format
2017-03-19 09:36:19 +01:00
* Native HTML support instead going through 'aha'
2017-09-27 09:07:21 +02:00
* Better formatting of output (indentation)
* Choice showing the RFC naming scheme only
2017-02-13 09:33:03 +01:00
* LUCKY13 and SWEET32 checks
2017-12-12 15:31:06 +01:00
* Check for vulnerability to Bleichenbacher attacks
2017-05-15 20:14:11 +02:00
* Ticketbleed check
2017-11-14 13:52:13 +01:00
* Decoding of unencrypted BIG IP cookies
2017-02-13 09:33:03 +01:00
* LOGJAM: now checking also for known DH parameters
* Check for CAA RR
2017-05-17 18:56:07 +02:00
* Check for OCSP must staple
2017-08-26 11:20:46 +02:00
* Check for Certificate Transparency
2017-11-14 13:52:13 +01:00
* Expect-CT Header Detection
2017-05-17 09:03:15 +02:00
* Check for session resumption (Ticket, ID)
2017-09-19 17:34:22 +02:00
* TLS Robustness check (GREASE)
2017-09-27 09:07:21 +02:00
* Postgres und MySQL STARTTLS support, MongoDB support
2017-09-25 22:07:40 +02:00
* Decodes BIG IP F5 Cookie
2018-02-19 11:55:12 +01:00
* Fully OpenBSD and LibreSSL support
2017-11-14 13:52:13 +01:00
* Missing SAN warning
2017-07-13 13:55:22 +02:00
* Man page
2017-11-14 13:52:13 +01:00
* Better error msg suppression (not fully installed OpenSSL)
* DNS over Proxy and other proxy improvements
2018-02-19 11:55:12 +01:00
* 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
2016-11-03 13:42:18 +01:00
2017-05-17 18:56:07 +02:00
#### Further features planned in 2.9dev
2016-11-03 13:42:18 +01:00
https://github.com/drwetter/testssl.sh/issues?q=is%3Aopen+is%3Aissue+milestone%3A2.9dev
2016-11-03 13:36:55 +01:00
#### Contributions
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.
2017-03-19 09:36:19 +01:00
There's a [coding guideline ](https://github.com/drwetter/testssl.sh/wiki/Coding-Style ).
2016-11-03 13:36:55 +01:00
Please file bug reports @ https://github.com/drwetter/testssl.sh/issues.
#### Documentation
For a start see the
2017-06-13 00:29:44 +02:00
[wiki ](https://github.com/drwetter/testssl.sh/wiki/Man-Page ).
2017-06-13 08:41:32 +02:00
Help is needed here. Will Hunt provides a good [description ](https://www.4armed.com/blog/doing-your-own-ssl-tls-testing/ ) for version 2.8, including useful background info.
2016-11-03 13:36:55 +01:00
#### Bug reports
2017-05-17 18:56:07 +02:00
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 ;-)
2016-11-03 13:36:55 +01:00
----
## External/related projects
Please address questions not specifically to the code of testssl.sh to the
respective projects
#### Cool web frontend
* https://github.com/TKCERT/testssl.sh-webfrontend
2017-07-13 13:55:22 +02:00
#### Mass scanner w parallel scans and elastic searching the results
2016-11-03 13:36:55 +01:00
* https://github.com/TKCERT/testssl.sh-masscan
2017-11-06 21:56:06 +01:00
#### A ready-to-go docker image is at:
2016-11-03 13:36:55 +01:00
* https://quay.io/repository/jumanjiman/testssl
2017-11-14 13:52:13 +01:00
#### Privacy checker using testssl.sh
* https://privacyscore.org
2016-11-03 13:36:55 +01:00
#### Brew package
* see [#233 ](https://github.com/drwetter/testssl.sh/issues/233 ) and
[https://github.com/Homebrew/homebrew ](https://github.com/Homebrew/homebrew )