1TESTSSL(1)                                                          TESTSSL(1)
2
3
4

NAME

6       testssl
7

NAME

9       testssl -- check encryption of SSL/TLS servers
10

SYNOPSIS

12       testssl [OPTIONS] <URI>, testssl [OPTIONS] --file <FILE>
13
14       or
15
16       testssl [BANNER OPTIONS]
17

DESCRIPTION

19       testssl  is a free command line tool which checks a server´s service on
20       any port for the support of TLS/SSL ciphers, protocols as well as cryp‐
21       tographic flaws and much more.
22
23       The  output  rates findings by color (screen) or severity (file output)
24       so that you are able to tell whether something  is  good  or  bad.  The
25       (screen)  output  has  several  sections in which classes of checks are
26       being performed. To ease  readability  on  the  screen  it  aligns  and
27       indents the output properly.
28
29       Only  you  see  the result. You also can use it internally on your LAN.
30       Except DNS lookups or unless you instruct testssl to check for  revoca‐
31       tion  of certificates it doesn´t use any other hosts or even third par‐
32       ties for any test.
33

REQUIREMENTS

35       Testssl.sh is out of the box portable:  it  runs  under  any  Unix-like
36       stack:  Linux,  *BSD,  MacOS X, WSL=Windows Subsystem for Linux, Cygwin
37       and MSYS2. bash is a prerequisite, also version 3 is  still  supported.
38       Standard utilities like awk, sed, tr and head are also needed. This can
39       be of a BSD, System 5 or GNU flavor whereas grep from System V  is  not
40       yet supported.
41
42       Any  OpenSSL or LibreSSL version is needed as a helper. Unlike previous
43       versions of testssl almost every check is done via  (TCP)  sockets.  In
44       addition statically linked OpenSSL binaries for major operating systems
45       are supplied in ./bin/.
46

GENERAL

48       testssl URI as the default invocation does the  so-called  default  run
49       which  does a number of checks and puts out the results colorized (ANSI
50       and termcap) on the screen. It does every check listed below except  -E
51       which are (order of appearance):
52
53       0) displays a banner (see below), does a DNS lookup also for further IP
54       addresses and does for the returned IP address a reverse  lookup.  Last
55       but not least a service check is being done.
56
57       1) SSL/TLS protocol check
58
59       2)  standard  cipher  categories  to  give  you upfront an idea for the
60       ciphers supported
61
62       3) checks (perfect) forward secrecy: ciphers and elliptical curves
63
64       4) server preferences (server order)
65
66       5) server defaults (certificate info, TLS extensions, session  informa‐
67       tion)
68
69       6) HTTP header (if HTTP detected or being forced via --assume-http)
70
71       7) vulnerabilities
72
73       8) testing each of 370 preconfigured ciphers
74
75       9) client simulation
76

OPTIONS AND PARAMETERS

78       Options  are  either  short  or  long options. Any long or short option
79       requiring a value can be called with or without  an  equal  sign.  E.g.
80       testssl  -t=smtp --wide --openssl=/usr/bin/openssl <URI> (short options
81       with equal sign)  is  equivalent  to  testssl  --starttls  smtp  --wide
82       --openssl /usr/bin/openssl <URI> (long option without equal sign). Some
83       command line options can also be preset via  ENV  variables.  WIDE=true
84       OPENSSL=/usr/bin/openssl  testssl  --starttls=smtp  <URI>  would be the
85       equivalent to the aforementioned examples. Preference has  the  command
86       line over any environment variables.
87
88       <URI> or --file <FILE> always needs to be the last parameter.
89
90   BANNER OPTIONS
91       --help (or no arg) display command line help
92
93       -b,  --banner  displays testssl banner, including license, usage condi‐
94       tions, version of testssl, detected openssl version, its path to it,  #
95       of ciphers of openssl, its build date and the architecture.
96
97       -v, --version same as before
98
99       -V  [pattern]  ,  --local [pattern] pretty print all local ciphers sup‐
100       ported by openssl version. If a pattern is supplied it performs a match
101       (ignore  case)  on  any of the strings supplied in the wide output, see
102       below. The pattern will be searched in the any of the columns: hexcode,
103       cipher suite name (OpenSSL or IANA), key exchange, encryption, bits. It
104       does a word pattern match for non-numbers, for  number  just  a  normal
105       match  applies.  Numbers  here  are  defined  as  [0-9,A-F]. This means
106       (attention: catch) that the pattern CBC is matched as non-word, but AES
107       as word.
108
109   INPUT PARAMETERS
110       URI  can be a hostname, an IPv4 or IPv6 address (restriction see below)
111       or an URL. IPv6 addresses need to be in square brackets. For any  given
112       parameter port 443 is assumed unless specified by appending a colon and
113       a port number. The only preceding protocol specifier allowed is  https.
114       You  need  to  be aware that checks for an IP address might not hit the
115       vhost you want. DNS  resolution  (A/AAAA  record)  is  being  performed
116       unless you have an /etc/hosts entry for the hostname.
117
118       --file  <fname> or the equivalent -iL <fname> are mass testing options.
119       Per default it implicitly turns  on  --warnings  batch.  In  its  first
120       incarnation  the  mass  testing  option reads command lines from fname.
121       fname consists of command lines of testssl, one line per instance. Com‐
122       ments  after # are ignored, EOF signals the end of fname any subsequent
123       lines will be ignored too. You can also supply additional options which
124       will  be  inherited  to  each  child, e.g. When invoking testssl --wide
125       --log --file <fname> . Each single line in fname is parsed upon  execu‐
126       tion. If there´s a conflicting option and serial mass testing option is
127       being performed the check will be aborted at the  time  it  occurs  and
128       depending  on  the output option potentially leaving you with an output
129       file without footer. In parallel mode the mileage varies, likely a line
130       won´t be scanned.
131
132       Alternatively  fname  can be in nmap´s grep(p)able output format (-oG).
133       Only open ports  will  be  considered.  Multiple  ports  per  line  are
134       allowed.  The  ports  can  be  different  and will be tested by testssl
135       according to common practice in the internet, i.e. if nmap shows in its
136       output  an open port 25, automatically -t smtp will be added before the
137       URI whereas port 465 will be treated  as  a  plain  TLS/SSL  port,  not
138       requiring an STARTTLS SMTP handshake upfront. This is done by an inter‐
139       nal table which correlates nmap´s open  port  detected  to  the  START‐
140       TLS/plain text decision from testssl.
141
142       Nmap´s output always returns IP addresses and only if there´s a PTR DNS
143       record available a hostname. As it is not checked by nmap  whether  the
144       hostname matches the IP (A or AAAA record), testssl does this automati‐
145       cally for you. If the A record of the hostname matches the IP  address,
146       the  hostname  is used and not the IP address. Please keep in mind that
147       checks against an IP address might not hit the  vhost  you  maybe  were
148       aiming at and thus it may lead to different results.
149
150       A  typical  internal  conversion  to  testssl  file  format from nmap´s
151       grep(p)able format could look like:
152
153
154
155           10.10.12.16:443
156           10.10.12.16:1443
157           -t smtp host.example.com:25
158           host.example.com:443
159           host.example.com:631
160           -t ftp 10.10.12.11:21
161           10.10.12.11:8443
162
163
164
165       Please note that fname has to be in Unix format. DOS  carriage  returns
166       won´t  be  accepted. Instead of the command line switch the environment
167       variable FNAME will be honored too.
168
169       --mode <serial|parallel>. Mass testing to be done serial  (default)  or
170       parallel  (--parallel is shortcut for the latter, --serial is the oppo‐
171       site option). Per default mass testing is being  run  in  serial  mode,
172       i.e.  one  line  after the other is processed and invoked. The variable
173       MASS_TESTING_MODE can be defined to be either equal serial or parallel.
174
175       --warnings <batch|off>. The warnings parameter determines  how  testssl
176       will  deal with situations where user input normally will be necessary.
177       There are two options. batch doesn´t wait  for  a  confirming  keypress
178       when  a client- or server-side probem is encountered. As of 3.0 it just
179       then terminates the particular scan. This is automatically  chosen  for
180       mass testing (--file). off just skips the warning, the confirmation but
181       continues the scan, independent whether it makes sense or  not.  Please
182       note  that there are conflicts where testssl will still ask for confir‐
183       mation which are the ones which otherwise would have a  drastic  impact
184       on the results. Almost any other decision will be made in the future as
185       a best guess by testssl. The same can be achieved by setting the  envi‐
186       ronment variable WARNINGS.
187
188       --connect-timeout  <seconds>  This is useful for socket TCP connections
189       to a node. If the node does not complete a TCP handshake (e.g.  because
190       it  is down or behind a firewall or there´s an IDS or a tarpit) testssl
191       may usually hang for around 2 minutes or even much more. This parameter
192       instructs testssl to wait at most seconds for the handshake to complete
193       before giving up. This option only works  if  your  OS  has  a  timeout
194       binary  installed.  CONNECT_TIMEOUT  is  the  corresponding environment
195       variable.
196
197       --openssl-timeout <seconds> This is especially useful for all  connects
198       using  openssl  and  practically useful for mass testing. It avoids the
199       openssl connect to hang for ~2 minutes. The expected parameter  seconds
200       instructs  testssl  to  wait  before the openssl connect will be termi‐
201       nated. The option is only available if your OS  has  a  timeout  binary
202       installed.  As there are different implementations of timeout: It auto‐
203       matically calls the binary with the right  parameters.  OPENSSL_TIMEOUT
204       is the equivalent environment variable.
205
206       --basicauth <user:pass> This can be set to provide HTTP basic auth cre‐
207       dentials which are used during checks for security  headers.  BASICAUTH
208       is the ENV variable you can use instead.
209
210   SPECIAL INVOCATIONS
211       -t  <protocol>,  --starttls  <protocol>  does  a  default run against a
212       STARTTLS enabled protocol. protocol must be one  of  ftp,  smtp,  pop3,
213       imap,  xmpp,  telnet,  ldap,  irc, lmtp, nntp, postgres, mysql. For the
214       latter four you need e.g.  the  supplied  OpenSSL  or  OpenSSL  version
215       1.1.1.  Please  note: MongoDB doesn´t offer a STARTTLS connection, LDAP
216       currently only works with --ssl-native. telnet and irc is WIP.
217
218       --xmpphost <jabber_domain> is an additional option for STARTTLS enabled
219       XMPP:  It expects the jabber domain as a parameter. This is only needed
220       if the domain is different from the URI supplied.
221
222       --mx <domain|host> tests all MX records (STARTTLS on port 25) from high
223       to low priority, one after the other.
224
225       --ip  <ip>  tests  either  the supplied IPv4 or IPv6 address instead of
226       resolving host(s) in <URI>. IPv6  addresses  need  to  be  supplied  in
227       square  brackets.  --ip=one  means:  just  test  the first A record DNS
228       returns (useful for multiple IPs). If -6 and --ip=one was  supplied  an
229       AAAA  record will be picked if available. The --ip option might be also
230       useful if you want to resolve the supplied hostname to a different  IP,
231       similar  as  if  you would edit /etc/hosts or /c/Windows/System32/driv‐
232       ers/etc/hosts. --ip=proxy tries a DNS resolution via proxy.
233
234       --proxy  <host>:<port>  does  ANY  check  via  the   specified   proxy.
235       --proxy=auto inherits the proxy setting from the environment. The host‐
236       name supplied will be resolved to the first A record.  In  addition  if
237       you  want  lookups  via  proxy you can specify DNS_VIA_PROXY=true. OCSP
238       revocation checking (-S --phone-out) is not supported  by  OpenSSL  via
239       proxy.  As supplying a proxy is an indicator for port 80 and 443 outgo‐
240       ing being blocked in your network an OCSP  revocation  check  won´t  be
241       performed.  However if IGN_OCSP_PROXY=true has been supplied it will be
242       tried directly. Authentication to the proxy is not supported.  Proxying
243       via  IPv6  addresses  is  not possible, no HTTPS or SOCKS proxy is sup‐
244       ported.
245
246       -6 does (also) IPv6 checks. Please note that  testssl  doesn´t  perform
247       checks  on  an  IPv6  address  automatically,  because  of two reasons:
248       testssl does no connectivity checks for IPv6 and  it  cannot  determine
249       reliably whether the OpenSSL binary you´re using has IPv6 s_client sup‐
250       port. -6 assumes both is the case. If both conditions are met  and  you
251       in  general  prefer  to  test  for  IPv6  branches  as well you can add
252       HAS_IPv6 to your shell environment. Besides the OpenSSL binary supplied
253       IPv6  is known to work with vanilla OpenSSL >= 1.1.0 and older versions
254       >=1.0.2 in RHEL/CentOS/FC and Gentoo.
255
256       --ssl-native Instead of using a mixture  of  bash  sockets  and  a  few
257       openssl  s_client connects, testssl uses the latter (almost) only. This
258       is faster at the moment but provides less accurate results,  especially
259       for  the  client  simulation and for cipher support. For all checks you
260       will see a warning if testssl cannot tell if a particular check  cannot
261       be  performed.  For  some checks however you might end up getting false
262       negatives without a warning. This option is  only  recommended  if  you
263       prefer  speed over accuracy or you know that your target has sufficient
264       overlap with the protocols and cipher provided by your openssl binary.
265
266       --openssl <path_to_openssl> testssl tries very hard to  find  automagi‐
267       cally  the binary supplied (where the tree of testssl resides, from the
268       directory where testssl has been  started  from,  etc.).  If  all  that
269       doesn´t  work  it  falls  back to openssl supplied from the OS ($PATH).
270       With this option you can point testssl to your  binary  of  choice  and
271       override  any  internal  magic to find the openssl binary. (Environment
272       preset via OPENSSL=<path_to_openssl>).
273
274   TUNING OPTIONS
275       --bugs does some workarounds for buggy servers like padding for old  F5
276       devices.  The  option  is  passed  as  -bug to openssl when needed, see
277       s_client(1), environment preset via BUGS="-bugs"  (1x  dash).  For  the
278       socket part testssl has always workarounds in place to cope with broken
279       server implementations.
280
281       --assuming-http testssl normally does upfront an  application  protocol
282       detection. In cases where HTTP cannot be automatically detected you may
283       want to use this option. It enforces testssl not to skip HTTP  specific
284       tests  (HTTP  header)  and  to  run  a browser based client simulation.
285       Please note that sometimes also the severity depends on the application
286       protocol,  e.g.  SHA1  signed certificates, the lack of any SAN matches
287       and some vulnerabilities will be punished harder when  checking  a  web
288       server as opposed to a mail server.
289
290       -n,  --nodns  <min|none> tells testssl which DNS lookups should be per‐
291       formed. min uses only forward DNS resolution (A and AAAA record  or  MX
292       record)  and skips CAA lookups and PTR records from the IP address back
293       to a DNS name. none performs no DNS lookups at all. For the latter  you
294       either  have  to supply the IP address as a target, to use --ip or have
295       the IP address in /etc/hosts. The use of the switch is only  useful  if
296       you  either can´t or are not willing to perform DNS lookups. The latter
297       can apply e.g. to some pentests. In general this option could e.g. help
298       you to avoid timeouts by DNS lookups. NODNS is the environment variable
299       for this.
300
301       --sneaky For HTTP  header  checks  testssl  uses  normally  the  server
302       friendly  HTTP user agent TLS tester from ${URL}. With this option your
303       traces are less verbose and a Firefox user  agent  is  being  used.  Be
304       aware  that  it doesn´t hide your activities. That is just not possible
305       (environment preset via SNEAKY=true).
306
307       --ids-friendly is a switch which may help to get a scan finished  which
308       otherwise  would  be  blocked  by  a server side IDS. This switch skips
309       tests for the following  vulnerabilities:  Heartbleed,  CCS  Injection,
310       Ticketbleed  and ROBOT. The environment variable OFFENSIVE set to false
311       will achieve the same result. Please be advised that as an  alternative
312       or  as  a  general  approach you can try to apply evasion techniques by
313       changing the  variables  USLEEP_SND  and  /  or  USLEEP_REC  and  maybe
314       MAX_WAITSOCK.
315
316       --phone-out  Checking  for revoked certificates via CRL and OCSP is not
317       done per default. This switch instructs testssl to query external -- in
318       a  sense  of the current run -- URIs. By using this switch you acknowl‐
319       edge that the check might have privacy issues, a  download  of  several
320       megabytes  (CRL  file) may happen and there may be network connectivity
321       problems while contacting the endpoint which  testssl  doesn´t  handle.
322       PHONE_OUT is the environment variable for this which needs to be set to
323       true if you want this.
324
325       --add-ca <cafile> enables you to add your own  CA(s)  for  trust  chain
326       checks.  cafile can be a single path or multiple paths as a comma sepa‐
327       rated list of root CA files. Internally they will be added during  run‐
328       time  to  all CA stores. This is (only) useful for internal hosts whose
329       certificates  is  issued   by   internal   CAs.   Alternatively   ADDI‐
330       TIONAL_CA_FILES is the environment variable for this.
331
332   SINGLE CHECK OPTIONS
333       Any  single  check switch supplied as an argument prevents testssl from
334       doing a default run. It just takes this and if supplied  other  options
335       and runs them - in the order they would also appear in the default run.
336
337       -e, --each-cipher checks each of the (currently configured) 370 ciphers
338       via openssl + sockets remotely on  the  server  and  reports  back  the
339       result in wide mode. If you want to display each cipher tested you need
340       to add --show-each. Per default it lists the following parameters: hex‐
341       code,  OpenSSL  cipher  suite  name,  key  exchange,  encryption  bits,
342       IANA/RFC cipher suite name. Please note the --mapping parameter changes
343       what  cipher  suite names you will see here and at which position. Also
344       please note that the bit length for the encryption is shown and not the
345       security  length, albeit it´ll be sorted by the latter. For 3DES due to
346       the Meet-in-the-Middle problem the bit size of 168 bits  is  equivalent
347       to the security size of 112 bits.
348
349       -E,  --cipher-per-proto is similar to -e, --each-cipher. It checks each
350       of the possible ciphers, here: per protocol. If  you  want  to  display
351       each cipher tested you need to add --show-each. The output is sorted by
352       security strength, it lists the encryption bits though.
353
354       -s, --std, --standard tests certain lists of cipher suites by strength.
355       Those lists are (openssl ciphers $LIST, $LIST from below:)
356
357       ·   NULL encryption ciphers: ´NULL:eNULL´
358
359       ·   Anonymous NULL ciphers: ´aNULL:ADH´
360
361       ·   Export ciphers (w/o the preceding ones): ´EXPORT:!ADH:!NULL´
362
363       ·   LOW   (64   Bit   +   DES   ciphers,   without   EXPORT   ciphers):
364           ´LOW:DES:RC2:RC4:!ADH:!EXP:!NULL:!eNULL´
365
366       ·   3DES + IDEA Ciphers: ´3DES:IDEA:!aNULL:!ADH´
367
368       ·   Average        grade        Ciphers:        ´HIGH:MEDIUM:AES:CAMEL‐
369           LIA:ARIA:!IDEA:!CHACHA20:!3DES:!RC2:!RC4:!AESCCM8:!AESCCM:!AES‐
370           GCM:!ARIAGCM:!aNULL´
371
372       ·   Strong grade Ciphers (AEAD): ´AESGCM:CHACHA20:CamelliaGCM:AESCCM´
373
374
375
376       -f, --pfs, --fs,--nsa  Checks  robust  (perfect)  forward  secrecy  key
377       exchange.  "Robust"  means  that  ciphers having intrinsic severe weak‐
378       nesses like Null Authentication or Encryption, 3DES and  RC4  won´t  be
379       considered  here. There shouldn´t be the wrong impression that a secure
380       key exchange has been taking place and everything is fine when in real‐
381       ity  the encryption sucks. Also this section lists the available ellip‐
382       tical curves and Diffie Hellman groups, as well as  FFDHE  groups  (TLS
383       1.2 and TLS 1.3).
384
385       -p,  --protocols checks TLS/SSL protocols SSLv2, SSLv3, TLS 1.0 through
386       TLS 1.3 and for HTTP: SPDY (NPN) and ALPN, a.k.a. HTTP/2. For  TLS  1.3
387       several  drafts  (from  18 on) and final are supported and being tested
388       for.
389
390       -P, --preference displays the servers preferences: cipher  order,  with
391       used  openssl  client:  negotiated  protocol  and  cipher. If there´s a
392       cipher order enforced by the server it displays it  for  each  protocol
393       (openssl+sockets).  If  there´s  not, it displays instead which ciphers
394       from the server were picked with each protocol.
395
396       -S, --server_defaults displays information from the server hello(s):
397
398       ·   Available TLS extensions,
399
400       ·   TLS ticket + session ID information/capabilities,
401
402       ·   session resumption capabilities,
403
404       ·   Time skew relative to localhost (most server implementations return
405           random values).
406
407       ·   Several certificate information
408
409           ·   signature algorithm,
410
411           ·   key size,
412
413           ·   key usage and extended key usage,
414
415           ·   fingerprints and serial
416
417           ·   Common Name (CN), Subject Alternative Name (SAN), Issuer,
418
419           ·   Trust  via  hostname + chain of trust against supplied certifi‐
420               cates
421
422           ·   EV certificate detection
423
424           ·   experimental "eTLS" detection
425
426           ·   validity: start + end time, how many days to  go  (warning  for
427               certificate lifetime >=5 years)
428
429           ·   revocation  info (CRL, OCSP, OCSP stapling + must staple). When
430               --phone-out supplied it checks against the  certificate  issuer
431               whether  the  host  certificate  has  been revoked (plain OCSP,
432               CRL).
433
434           ·   displaying DNS Certification Authority  Authorization  resource
435               record
436
437           ·   Certificate Transparency info (if provided by server).
438
439
440
441
442
443
444       For  the  trust  chain  check 5 certificate stores are provided. If the
445       test against one of the trust stores failed, the one is  being  identi‐
446       fied and the reason for the failure is displayed - in addition the ones
447       which succeeded are displayed too. You can configure your  own  CA  via
448       ADDITIONAL_CA_FILES, see section FILES below. If the server provides no
449       matching record in Subject Alternative Name (SAN) but  in  Common  Name
450       (CN),  it  will  be  indicated as this is deprecated. Also for multiple
451       server certificates are being checked for as well as for  the  certifi‐
452       cate reply to a non-SNI (Server Name Indication) client hello to the IP
453       address. Regarding the TLS clock skew: it displays the time  difference
454       to  the  client.  Only a few TLS stacks nowadays still support this and
455       return the local clock gmt_unix_time, e.g. IIS, openssl  <  1.0.1f.  In
456       addition  to the HTTP date you could e.g. derive that there are differ‐
457       ent hosts where your TLS and your HTTP request ended  --  if  the  time
458       deltas differ significantly.
459
460       -x  <pattern>,  --single-cipher  <pattern>  tests  matched  pattern  of
461       ciphers against a server. Patterns are similar to -V pattern ,  --local
462       pattern, see above about matching.
463
464       -h,  --header, --headers if the service is HTTP (either by detection or
465       by enforcing via --assume-http. It tests several HTTP headers like
466
467       ·   HTTP Strict Transport Security (HSTS)
468
469       ·   HTTP Public Key Pinning (HPKP)
470
471       ·   Server banner
472
473       ·   HTTP date+time
474
475       ·   Server banner like Linux or other Unix vendor headers
476
477       ·   Application banner (PHP, RoR, OWA, SharePoint, Wordpress, etc)
478
479       ·   Reverse proxy headers
480
481       ·   Web server modules
482
483       ·   IPv4 address in header
484
485       ·   Cookie (including Secure/HTTPOnly flags)
486
487       ·   Decodes BIG IP F5 non-encrypted cookies
488
489       ·   Security headers (X-Frame-Options, X-XSS-Protection,  Expect-CT,...
490           , CSP headers). Nonsense is not yet detected here.
491
492
493
494       -c,  --client-simulation  This  simulates  a handshake with a number of
495       standard clients so that you can figure out which client cannot or  can
496       connect  to  your  site.  For  the latter case the protocol, cipher and
497       curve is displayed, also if there´s Forward  Secrecy.  testssl  uses  a
498       handselected set of clients which are retrieved by the SSLlabs API. The
499       output is aligned in columns when combined with the --wide  option.  If
500       you  want  the full nine yards of clients displayed use the environment
501       variable ALL_CLIENTS.
502
503       -g, --grease checks several server implementation bugs  like  tolerance
504       to   size   limitations   and   GREASE,   see  https://www.ietf.org/ar
505       chive/id/draft-ietf-tls-grease-01.txt . This  checks  doesn´t  run  per
506       default.
507
508   VULNERABILITIES
509       -U,  --vulnerable,  --vulnerabilities Just tests all (of the following)
510       vulnerabilities.  The  environment  variable  VULN_THRESHLD  determines
511       after  which  value a separate headline for each vulnerability is being
512       displayed. Default is 1 which means if you check for  two  vulnerabili‐
513       ties,  only  the  general  headline for vulnerabilities section is dis‐
514       played -- in addition to the vulnerability and  the  result.  Otherwise
515       each  vulnerability  or  vulnerability section gets its own headline in
516       addition to the output of the name of the vulnerabilty and test result.
517       A  vulnerability  section is comprised of more than one check, e.g. the
518       renegotiation vulnerability check has two checks, so has Logjam.
519
520       -H, --heartbleed Checks for Heartbleed, a memory  leakage  in  openssl.
521       Unless  the  server  side doesn´t support the heartbeat extension it is
522       likely that this check runs into a timeout. The seconds to wait  for  a
523       reply can be adjusted with HEARTBLEED_MAX_WAITSOCK. 8 is the default.
524
525       -I, --ccs, --ccs-injection Checks for CCS Injection which is an openssl
526       vulnerability. Sometimes also here the check needs to wait for a reply.
527       The predefined timeout of 5 seconds can be changed with the environment
528       variable CCS_MAX_WAITSOCK.
529
530       -T, --ticketbleed Checks for Ticketbleed memory leakage in BigIP  load‐
531       balancers.
532
533       -BB,  --robot  Checks for vulnerability to ROBOT / (Return Of Bleichen‐
534       bacher´s Oracle Threat) attack.
535
536       -R,  --renegotiation  Tests  renegotiation  vulnerabilities.  Currently
537       there´s  a  check for Secure Renegotiation and for Secure Client-Initi‐
538       ated Renegotiation. Please be aware that vulnerable servers to the lat‐
539       ter  can  likely  be  DoSed  very  easily  (HTTP). A check for Insecure
540       Client-Initiated Renegotiation is not yet implemented.
541
542       -C,  --compression,  --crime  Checks  for  CRIME   (Compression   Ratio
543       Info-leak  Made  Easy)  vulnerability  in TLS. CRIME in SPDY is not yet
544       being checked for.
545
546       -B, --breach Checks for BREACH (Browser Reconnaissance and Exfiltration
547       via  Adaptive Compression of Hypertext) vulnerability. As for this vul‐
548       nerability HTTP level compression is a prerequisite it´ll be not tested
549       if  HTTP  cannot  be  detected  or  the  detection  is not enforced via
550       `--assume-http. Please note that only the URL supplied (normally "/"  )
551       is being tested.
552
553       -O,  --poodle Tests for SSL POODLE (Padding Oracle On Downgraded Legacy
554       Encryption) vulnerability. It basically checks for the existence of CBC
555       ciphers in SSLv3.
556
557       -Z,   --tls-fallback  Checks  TLS_FALLBACK_SCSV  mitigation.  TLS_FALL‐
558       BACK_SCSV is basically a ciphersuite appended to the Client Hello  try‐
559       ing to prevent protocol downgrade attacks by a Man in the Middle.
560
561       -W,  --sweet32  Checks  for  vulnerability to SWEET32 by testing 64 bit
562       block ciphers (3DES, RC2 and IDEA).
563
564       -F, --freak Checks for FREAK vulnerability (Factoring RSA Export  Keys)
565       by testing for EXPORT RSA ciphers
566
567       -D,  --drown  Checks for DROWN vulnerability (Decrypting RSA with Obso‐
568       lete and Weakened eNcryption) by checking whether the SSL 2 protocol is
569       available  at the target. Please note that if you use the same RSA cer‐
570       tificate elsewhere you might be vulnerable too. testssl  doesn´t  check
571       for  this  but  provides a helpful link @ censys.io which provides this
572       service.
573
574       -J, --logjam Checks for LOGJAM vulnerability by checking for DH  EXPORT
575       ciphers.  It also checks for "common primes" which are preconfigured DH
576       keys. DH keys =< 1024 Bit will be penalized.  Also  FFDHE  groups  (TLS
577       1.2) will be displayed here.
578
579       -A,  --beast Checks BEAST vulnerabilities in SSL 3 and TLS 1.0 by test‐
580       ing the usage of CBC ciphers.
581
582       -L, --lucky13 Checks for LUCKY13 vulnerability. It checks for the pres‐
583       ence of CBC ciphers in TLS versions 1.0 - 1.2.
584
585       -4,  --rc4,  --appelbaum  Checks  which  RC4  stream  ciphers are being
586       offered.
587
588   OUTPUT OPTIONS
589       -q, --quiet Normally testssl displays a banner on stdout  with  several
590       version information, usage rights and a warning. This option suppresses
591       it. Please note that by choosing  this  option  you  acknowledge  usage
592       terms and the warning normally appearing in the banner.
593
594       --wide  Except  the  "each cipher output" all tests displays the single
595       cipher name (scheme see below). This option enables testssl to  display
596       also  for  the  following  sections the same output as for testing each
597       ciphers: BEAST, PFS, RC4. The client simulation has also a  wide  mode.
598       The  difference  here  is  restricted  to a column aligned output and a
599       proper headline. The environment variable WIDE can be used instead.
600
601       --mapping <openssl|iana|no-openssl|no-iana>
602
603       ·   openssl: use the OpenSSL cipher suite  name  as  the  primary  name
604           cipher suite name form (default),
605
606       ·   iana:  use  the  IANA  cipher suite name as the primary name cipher
607           suite name form.
608
609       ·   no-openssl: don´t display the OpenSSL cipher  suite  name,  display
610           IANA names only.
611
612       ·   no-iana:  don´t display the IANA cipher suite name, display OpenSSL
613           names only.
614
615
616
617       Please note that in testssl 3,0 you can still use rfc instead  of  iana
618       and no-rfc instead of no-iana but it´ll disappear after 3.0.
619
620       --show-each  This is an option for all wide modes only: it displays all
621       ciphers tested -- not only succeeded ones. SHOW_EACH_C is  your  friend
622       if you prefer to set this via the shell environment.
623
624       --color <0|1|2|3> determines the use of colors on the screen and in the
625       log file: 2 is the default and makes use of  ANSI  and  termcap  escape
626       codes  on  your  terminal.  1  just uses non-colored mark-up like bold,
627       italics, underline, reverse. 0 means no mark-up  at  all  =  no  escape
628       codes.  This is also what you want when you want a log file without any
629       escape codes. 3 will color ciphers and EC according to an internal (not
630       yet  perfect)  rating.  Setting  the  environment variable COLOR to the
631       value achieves the same result. Please not that OpenBSD and early Free‐
632       BSD do not support italics.
633
634       --colorblind  Swaps  green  and blue colors in the output, so that this
635       percentage    of    folks    (up    to     8%     of     males,     see
636       https://en.wikipedia.org/wiki/Color_blindness)  can  distinguish  those
637       findings better. COLORBLIND is the according variable if  you  want  to
638       set this in the environment.
639
640       --debug  <0-6>  This  gives  you additional output on the screen (2-6),
641       only useful for debugging. DEBUG is the according environment  variable
642       which  you can use. There are six levels (0 is the default, thus it has
643       no effect):
644
645       1.  screen  output  normal  but   leaves   useful   debug   output   in
646           /tmp/testssl.XXXXXX/  .  The  info  about  the  exact  directory is
647           included in the screen output in the end of the run.
648
649       2.  lists more what´s going on,  status  (high  level)  and  connection
650           errors, a few general debug output
651
652       3.  even slightly more info: hexdumps + other info
653
654       4.  display bytes sent via sockets
655
656       5.  display bytes received via sockets
657
658       6.  whole 9 yards
659
660
661
662   FILE OUTPUT OPTIONS
663       --log,   --logging   Logs   stdout   also  to  ${NODE}-p${port}${YYYYM‐
664       MDD-HHMM}.log in current working directory of the shell.  Depending  on
665       the  color output option (see above) the output file will contain color
666       and other markup escape codes, unless you specify --color  0  too.  cat
667       and  --  if  properly  configured less -- will show the output properly
668       formatted on your terminal. The output shows a banner with  the  almost
669       the same information as on the screen. In addition it shows the command
670       line of the testssl instance. Please note that the resulting  log  file
671       is  formatted  according  to  the  width  of  your screen while running
672       testssl. You can override  the  width  with  the  environment  variable
673       TERM_WIDTH.
674
675       --logfile <logfile> or -oL <logfile> Instead of the previous option you
676       may want to use this one if you want to log into a directory or if  you
677       rather  want  to  specify  the  log file name yourself. If logfile is a
678       directory the output  will  put  into  logfile/${NODE}-p${port}${YYYYM‐
679       MDD-HHMM}.log.  If  logfile  is  a  file it will use that file name, an
680       absolute path is also permitted here. LOGFILE is the variable you  need
681       to set if you prefer to work environment variables instead. Please note
682       that the resulting log file is formatted according to the width of your
683       screen while running testssl. You can override the width with the envi‐
684       ronment variable TERM_WIDTH.
685
686       --json  Logs  additionally  to   JSON   file   ${NODE}-p${port}${YYYYM‐
687       MDD-HHMM}.json  in  the  current  working  directory  of the shell. The
688       resulting JSON file is opposed to --json-pretty  flat  --  which  means
689       each  section  is  self contained and has an identifier for each single
690       check, the hostname/IP address, the port, severity and the finding. For
691       vulnerabilities  it  may  contain  a  CVE and CWE entry too. The output
692       doesn´t contain a banner or a footer.
693
694       --jsonfile <jsonfile> or -oj <jsonfile> Instead of the previous  option
695       you may want to use this one if you want to log the JSON out put into a
696       directory or if you rather want to specify the log file name  yourself.
697       If   jsonfile   is   a   directory   the  output  will  put  into  log‐
698       file/${NODE}-p${port}${YYYYMMDD-HHMM}.json. Ifjsonfile` is  a  file  it
699       will use that file name, an absolute path is also permitted here.
700
701       --json-pretty  Logs  additionally to JSON file ${NODE}-p${port}${YYYYM‐
702       MDD-HHMM}.json in the current  working  directory  of  the  shell.  The
703       resulting  JSON file is opposed to--json` non-flat -- which means it is
704       structured. The structure contains a header similar to  the  banner  on
705       the screen, including the command line, scan host, openssl binary used,
706       testssl version and epoch of the start time. Then for every  test  sec‐
707       tion  of testssl it contains a separate JSON object/section. Each find‐
708       ing has a key/value pair identifier with the identifier for each single
709       check, the severity and the finding. For vulnerabilities it may contain
710       a CVE and CWE entry too. The footer lists the scan time in seconds.
711
712       --jsonfile-pretty <jsonfile> or -oJ <jsonfile> Similar to the aforemen‐
713       tioned --jsonfile or --logfile it logs the output in pretty JSON format
714       (see --json-pretty) into a file or a directory. For further explanation
715       see --jsonfile or --logfile.
716
717       --csv   Logs   additionally  to  a  CSV  file  ${NODE}-p${port}${YYYYM‐
718       MDD-HHMM}.csv in the current working directory of the shell. The output
719       contains a header with the keys, the values are the same as in the flat
720       JSON format (identifier for each single check, the hostname/IP address,
721       the  port,  severity, the finding and for vulnerabilities a CVE and CWE
722       number).
723
724       --csvfile <csvfile> or -oC  <csvfile>  Similar  to  the  aforementioned
725       --jsonfile  or  --logfile  it logs the output in CSV format (see --cvs)
726       additionally into a file or a directory. For  further  explanation  see
727       --jsonfile or --logfile.
728
729       --html  Logs  additionally  to  an  HTML  file ${NODE}-p${port}${YYYYM‐
730       MDD-HHMM}.html in the current working directory of the shell.  It  con‐
731       tains  a  1:1  output  of  the  console. In former versions there was a
732       non-native    option    to    use    "aha"    (Ansi    HTML    Adapter:
733       github.com/theZiz/aha) like testssl [options] <URI> | aha >output.html.
734       This is not necessary anymore.
735
736       --htmlfile <htmlfile> or -oH <htmlfile> Similar to  the  aforementioned
737       --jsonfile  or --logfile it logs the output in HTML format (see --html)
738       additionally into a file or a directory. For  further  explanation  see
739       --jsonfile or --logfile.
740
741       -oA  <filename>  /  --outFile <filename> Similar to nmap it does a file
742       output to all available file formats: LOG, JSON pretty, CSV,  HTML.  If
743       the  filename supplied is equal auto the filename is automatically gen‐
744       erated using ´${NODE}-p${port}${YYYYMMDD-HHMM}.${EXT}´ with the accord‐
745       ing  extension.  If  a  directory is provided all output files will put
746       into <filename>/${NODE}-p${port}${YYYYMMDD-HHMM}.{log,json,csv,html}.
747
748       -oa <filename> / --outfile <filename> Does the  same  as  the  previous
749       option but uses flat JSON instead.
750
751       --hints  This  option  is  not in use yet. This option is meant to give
752       hints how to fix a finding or at least a  help  to  improve  something.
753       GIVE_HINTS is the environment variable for this.
754
755       --severity  <severity> For CSV and both JSON outputs this will only add
756       findings to the output file if a severity is equal or higher  than  the
757       severity  value specified. Allowed are <LOW|MEDIUM|HIGH|CRITICAL>. WARN
758       is another level which translates to a client-side  scanning  error  or
759       problem. Thus you will always see them in a file if they occur.
760
761       --append  Normally,  if an output file already exists and it has a file
762       size greater zero, testssl will prompt you to manually remove the  file
763       exit  with an error. --append however will append to this file, without
764       a header. The environment variable APPEND does  the  same.  Be  careful
765       using  this switch/variable. A complementary option which overwrites an
766       existing file doesn´t exist per design.
767
768       --outprefix <fname_prefix> Prepend output filename prefix  fname_prefix
769       before  ´${NODE}-´.  You  can  use  as  well  the  environment variable
770       FNAME_PREFIX. Using this any output files  will  be  named  <fname_pre‐
771       fix>-${NODE}-p${port}${YYYYMMDD-HHMM}.<format> when no file name of the
772       respective output option was specified. If you do not like the  separa‐
773       tor  ´-´  you can as well supply a <fname_prefix> ending in ´.´, ´_´ or
774       ´,´. In this case or if you already supplied ´-´ no additional ´-´ will
775       be appended to <fname_prefix>.
776
777       A few file output options can also be preset via environment variables.
778
779   COLOR RATINGS
780       Testssl.sh makes use of (the eight) standard terminal colors. The color
781       scheme is as follows:
782
783       ·   light red: a critical finding
784
785       ·   red: a high finding
786
787       ·   brown: a medium finding
788
789       ·   yellow: a low finding
790
791       ·   green (blue if COLORBLIND is set): something  which  is  either  in
792           general  a  good thing or a negative result of a check which other‐
793           wise results in a high finding
794
795       ·   light green (light blue if COLORBLIND is set) : something which  is
796           either in general a very good thing or a negative result of a check
797           which otherwise results in a critical finding
798
799       ·   no color at places where also a finding can be expected: a  finding
800           on an info level
801
802       ·   cyan: currently only used for --show-each or an additional hint
803
804       ·   magenta:  signals  a warning condition, e.g. either a local lack of
805           capabilities on the client side or another problem
806
807       ·   light magenta: a fatal error which either requires  strict  consent
808           from  the  user  to  continue  or a condition which leaves no other
809           choice for testssl to quit
810
811
812
813       What is labeled as "light" above appears as such on the screen  but  is
814       technically  speaking  "bold".  Besides  --color=3  will  color ciphers
815       according to an internal and rough rating.
816
817       Markup (without any color) is used in the following manner:
818
819       ·   bold: for the name of the test
820
821       ·   underline + bold: for the headline of each test section
822
823       ·   underline: for a sub-headline
824
825       ·   italics: for strings just reflecting a value read from the server
826
827
828
829   TUNING via ENV variables and more options
830       Except the environment variables mentioned above which can replace com‐
831       mand  line options here a some which cannot be set otherwise. Variables
832       used for tuning are preset with reasonable values. There should  be  no
833       reason to change them unless you use testssl under special conditions.
834
835       ·   TERM_WIDTH is a variable which overrides the auto-determined termi‐
836           nal width size. Setting this variable normally only makes sense  if
837           you  log  the  output  to  a file using the --log, --logfile or -oL
838           option.
839
840       ·   DEBUG_ALLINONE / SETX: when setting one of those  to  true  testssl
841           falls  back  to  the  standard  bash behavior, i.e. calling bash -x
842           testssl it displays the bash debugging output not  in  an  external
843           file /tmp/testssl-<XX>.log
844
845       ·   DEBUGTIME:  Profiling option. When using bash´s debug mode and when
846           this is set to true, it generates a separate text file  with  epoch
847           times  in  /tmp/testssl-<XX>.time.  They need to be concatenated by
848           paste /tmp/testssl-<XX>.{time,log}
849
850       ·   EXPERIMENTAL=true is an option  which  is  sometimes  used  in  the
851           development  process  to  make testing easier. In released versions
852           this has no effect.
853
854       ·   ALL_CLIENTS=true runs a client simulation with all (currently  126)
855           clients when testing HTTP.
856
857       ·   UNBRACKTD_IPV6:  needs  to  be set to true for some old versions of
858           OpenSSL (like from Gentoo) which  don´t  support  [bracketed]  IPv6
859           addresses
860
861       ·   NO_ENGINE:  if you have problems with garbled output containing the
862           word ´engine´ you might want to set this to true. It forces testssl
863           not  try  to  configure openssl´s engine or a non existing one from
864           libressl
865
866       ·   HEADER_MAXSLEEP: To wait how long before  killing  the  process  to
867           retrieve a service banner / HTTP header
868
869       ·   MAX_WAITSOCK: It instructs testssl to wait until the specified time
870           before declaring a socket connection dead. Don´t change this unless
871           you´re absolutely sure what you´re doing. Value is in seconds.
872
873       ·   CCS_MAX_WAITSOCK  Is  the  similar to above but applies only to the
874           CCS handshakes, for both of the two  the  two  CCS  payload.  Don´t
875           change  this unless you´re absolutely sure what you´re doing. Value
876           is in seconds.
877
878       ·   HEARTBLEED_MAX_WAITSOCK Is the similar to MAX_WAITSOCK but  applies
879           only to the ServerHello after sending the Heartbleed payload. Don´t
880           change this unless you´re absolutely sure what you´re doing.  Value
881           is in seconds.
882
883       ·   MEASURE_TIME_FILE  For  seldom  cases  when you don´t want the scan
884           time to be included in the output you can set this to false.
885
886       ·   STARTTLS_SLEEP is per default set to 10 (seconds). That´s the value
887           testssl  waits for a string in the STARTTLS handshake before giving
888           up.
889
890       ·   MAX_PARALLEL is the maximum number of tests to run in  parallel  in
891           parallel  mass  testing  mode.  The default value of 20 may be made
892           larger on systems with faster processors.
893
894       ·   MAX_WAIT_TEST is the maximum time (in seconds) to wait for a single
895           test  in  parallel  mass  testing  mode to complete. The default is
896           1200.
897
898       ·   HSTS_MIN is preset to 179 (days). If you want  warnings  sooner  or
899           later for HTTP Strict Transport Security you can change this.
900
901       ·   HPKP_MIN  is  preset  to  30 (days). If you want warnings sooner or
902           later for HTTP Public Key Pinning you can change this
903
904       ·   DAYS2WARN1 is the first threshold when you´ll be warning of a  cer‐
905           tificate  expiration  of  a  host,  preset  to 60 (days). For Let´s
906           Encrypt this value will be divided internally by 2.
907
908       ·   DAYS2WARN2 is the second threshold when you´ll be warning of a cer‐
909           tificate  expiration  of  a  host,  preset  to 30 (days). For Let´s
910           Encrypt this value will be divided internally by 2.
911
912       ·   TESTSSL_INSTALL_DIR  is  the  derived  installation  directory   of
913           testssl.  Relatively  to  that  the bin and mandatory etc directory
914           will be looked for.
915
916       ·   CA_BUNDLES_PATH: If you have an own set of CA bundles or  you  want
917           to point testssl to a specific location of a CA bundle, you can use
918           this variable to set the directory which testssl will  use.  Please
919           note that it overrides completely the builtin path of testssl which
920           means that you will only test against the  bundles  you  point  to.
921           Also  you  might  want to use ~/utils/create_ca_hashes.sh to create
922           the hashes for HPKP.
923
924       ·   MAX_SOCKET_FAIL: A number which  tells  testssl  how  often  a  TCP
925           socket  connection  may fail before the program gives up and termi‐
926           nates. The default is 2. You can increase it to a higher  value  if
927           you  frequently  see  a  message like Fatal error: repeated openssl
928           s_client connect problem, doesn´t make sense to continue.
929
930       ·   MAX_OSSL_FAIL: A number which tells testssl how  often  an  OpenSSL
931           s_client  connect  may  fail before the program gives up and termi‐
932           nates. The default is 2. You can increase it to a higher  value  if
933           you frequently see a message like Fatal error: repeated TCP connect
934           problems, giving up.
935
936       ·   MAX_HEADER_FAIL: A number which tells testssl how often a HTTP  GET
937           request  over  OpenSSL  may return an empty file before the program
938           gives up and terminates. The  default  is  3.  Also  here  you  can
939           incerase  the  threshold  when  you spot messages like Fatal error:
940           repeated HTTP header connect problems, doesn´t make sense  to  con‐
941           tinue.
942
943
944

EXAMPLES

946         testssl testssl
947
948       does  a  default  run  on  https://testssl  (protocols, standard cipher
949       lists, PFS, server preferences, server defaults, vulnerabilities, test‐
950       ing all known 370 ciphers, client simulation.
951
952
953
954             testssl testssl.net:443
955
956
957
958       does  the  same  default  run  as above with the subtle difference that
959       testssl.net has two IPv4 addresses. Both are tested.
960
961
962
963             testssl --ip=one --wide https://testssl.net:443
964
965
966
967       does the same checks as above, with the difference that one IP  address
968       is  being  picked  randomly.  Displayed is everything where possible in
969       wide format.
970
971
972
973             testssl -6 https://testssl.net
974
975
976
977       As opposed to the first example it also tests the IPv6 part -- supposed
978       you have an IPv6 network and your openssl supports IPv6 (see above).
979
980
981
982             testssl -t smtp smtp.gmail.com:25
983
984
985
986       Checks  are done via a STARTTLS handshake on the plain text port 25. It
987       checks every IP on smtp.gmail.com.
988
989
990
991               testssl --starttls=imap imap.gmx.net:143
992
993
994
995       does the same on the plain text IMAP port.
996
997       Please note that for plain TLS-encrypted ports you must not specify the
998       protocol   option  when  no  STARTTLS  handshake  is  offered:  testssl
999       smtp.gmail.com:465 just  checks  the  encryption  on  the  SMTPS  port,
1000       testssl imap.gmx.net:993 on the IMAPS port. Also MongoDB which provides
1001       TLS support without STARTTLS can be tested directly.
1002

RFCs and other standards

1004       ·   RFC 2246: The TLS Protocol Version 1.0
1005
1006       ·   RFC 2818: HTTP Over TLS
1007
1008       ·   RFC 2595: Using TLS with IMAP, POP3 and ACAP
1009
1010       ·   RFC 3207: SMTP Service Extension for  Secure  SMTP  over  Transport
1011           Layer Security
1012
1013       ·   RFC 3501: INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1
1014
1015       ·   RFC 4346: The Transport Layer Security (TLS) Protocol Version 1.1
1016
1017       ·   RFC 4366: Transport Layer Security (TLS) Extensions
1018
1019       ·   RFC  4492:  Elliptic  Curve  Cryptography  (ECC)  Cipher Suites for
1020           Transport Layer Security (TLS)
1021
1022       ·   RFC 5077: Transport Layer Security (TLS) Session Resumption
1023
1024       ·   RFC 5246: The Transport Layer Security (TLS) Protocol Version 1.2
1025
1026       ·   RFC 5280: Internet X.509 Public Key Infrastructure Certificate  and
1027           Certificate Revocation List (CRL) Profile
1028
1029       ·   RFC 5321: Simple Mail Transfer Protocol
1030
1031       ·   RFC  5746:  Transport Layer Security (TLS) Renegotiation Indication
1032           Extension
1033
1034       ·   RFC 6066: Transport Layer Security (TLS) Extensions: Extension Def‐
1035           initions
1036
1037       ·   RFC 6101: The Secure Sockets Layer (SSL) Protocol Version 3.0
1038
1039       ·   RFC 6120: Extensible Messaging and Presence Protocol (XMPP): Core
1040
1041       ·   RFC 6125: Domain-Based Application Service Identity [..]
1042
1043       ·   RFC 6797: HTTP Strict Transport Security (HSTS)
1044
1045       ·   RFC  6961:  The Transport Layer Security (TLS) Multiple Certificate
1046           Status Request Extension
1047
1048       ·   RFC 7469: Public Key Pinning Extension for HTTP (HPKP)
1049
1050       ·   RFC 7507: TLS Fallback Signaling Cipher Suite Value (SCSV) for Pre‐
1051           venting Protocol Downgrade Attacks
1052
1053       ·   RFC  7627: Transport Layer Security (TLS) Session Hash and Extended
1054           Master Secret Extension
1055
1056       ·   RFC 7633: X.509v3 Transport Layer Security (TLS) Feature Extension
1057
1058       ·   RFC 7465: Prohibiting RC4 Cipher Suites
1059
1060       ·   RFC 7685: A Transport  Layer  Security  (TLS)  ClientHello  Padding
1061           Extension
1062
1063       ·   RFC 7905: ChaCha20-Poly1305 Cipher Suites for Transport Layer Secu‐
1064           rity (TLS)
1065
1066       ·   RFC 7919: Negotiated Finite Field Diffie-Hellman Ephemeral  Parame‐
1067           ters for Transport Layer Security
1068
1069       ·   RFC  8143:  Using  Transport Layer Security (TLS) with Network News
1070           Transfer Protocol (NNTP)
1071
1072       ·   RFC 8446: The Transport Layer Security (TLS) Protocol Version 1.3
1073
1074       ·   W3C CSP: Content Security Policy Level 1-3
1075
1076       ·   TLSWG Draft: The Transport Layer Security  (TLS)  Protocol  Version
1077           1.3
1078
1079
1080

EXIT STATUS

1082       ·   0  testssl finished successfully without errors and without ambigu‐
1083           ous results
1084
1085       ·   1 testssl has encountered exactly one  ambiguous  situation  or  an
1086           error during run
1087
1088       ·   1+n  same  as  previous. The errors or ambiguous results are added,
1089           also per IP.
1090
1091       ·   50-200 reserved for returning a vulnerability  scoring  for  system
1092           monitoring or a CI tools
1093
1094       ·   242 (ERR_CHILD) Child received a signal from master
1095
1096       ·   244 (ERR_RESOURCE) Resources testssl needs couldn´t be read
1097
1098       ·   245  (ERR_CLUELESS)  Weird  state,  either  though  user options or
1099           testssl
1100
1101       ·   246 (ERR_CONNECT) Connectivity problem
1102
1103       ·   247 (ERR_DNSLOOKUP) Problem with resolving IP addresses or names
1104
1105       ·   248 (ERR_OTHERCLIENT) Other client problem
1106
1107       ·   249 (ERR_DNSBIN) Problem with DNS lookup binaries
1108
1109       ·   250 (ERR_OSSLBIN) Problem with OpenSSL binary
1110
1111       ·   251 (ERR_NOSUPPORT) Feature requested is not supported
1112
1113       ·   252 (ERR_FNAMEPARSE) Input file couldn´t be parsed
1114
1115       ·   253 (ERR_FCREATE) Output file couldn´t be created
1116
1117       ·   254 (ERR_CMDLINE) Cmd line couldn´t be parsed
1118
1119       ·   255 (ERR_BASH) Bash version incorrect
1120
1121
1122

FILES

1124       etc/*pem are the certificate stores from Apple, Linux, Mozilla Firefox,
1125       Windows and Java.
1126
1127       etc/client-simulation.txt contains client simulation data.
1128
1129       etc/cipher-mapping.txt  provides  a  mandatory  file  with mapping from
1130       OpenSSL cipher suites names to the ones from IANA / used in the RFCs.
1131
1132       etc/tls_data.txt provides a mandatory file for ciphers  (bash  sockets)
1133       and key material.
1134

AUTHORS

1136       Developed  by Dirk Wetter, David Cooper and many others, see CREDITS.md
1137       .
1138
1140       Copyright © 2012 Dirk Wetter. License GPLv2: Free Software  Foundation,
1141       Inc.  This is free software: you are free to change and redistribute it
1142       under the terms of the license, see LICENSE.
1143
1144       Attribution is important for the future of this project - also  in  the
1145       internet.  Thus  if  you´re offering a scanner based on testssl.sh as a
1146       public and/or paid service in the internet you are strongly  encouraged
1147       to mention to your audience that you´re using this program and where to
1148       get this program from. That helps us to get  bugfixes,  other  feedback
1149       and more contributions.
1150
1151       Usage WITHOUT ANY WARRANTY. USE at your OWN RISK!
1152

LIMITATION

1154       All native Windows platforms emulating Linux are known to be slow.
1155

BUGS

1157       Probably.  Current  known  ones  and  interface  for  filing  new ones:
1158       https://testssl.sh/bugs/ .
1159

SEE ALSO

1161       ciphers(1),  openssl(1),  s_client(1),  x509(1),  verify(1),   ocsp(1),
1162       crl(1),    bash(1)    and    the   websites   https://testssl.sh/   and
1163       https://github.com/drwetter/testssl.sh/ .
1164
1165
1166
1167                                 January 2020                       TESTSSL(1)
Impressum