1TESTSSL(1) TESTSSL(1)
2
3
4
6 testssl
7
9 testssl -- check encryption of SSL/TLS servers
10
12 testssl [OPTIONS] <URI>, testssl [OPTIONS] --file <FILE>
13
14 or
15
16 testssl [BANNER OPTIONS]
17
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 be‐
26 ing performed. To ease readability on the screen it aligns and indents
27 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
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
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 ci‐
60 phers 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
78 Options are either short or long options. Any long or short option re‐
79 quiring 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 (at‐
106 tention: catch) that the pattern CBC is matched as non-word, but AES as
107 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 un‐
116 less 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 in‐
120 carnation the mass testing option reads command lines from fname. fname
121 consists of command lines of testssl, one line per instance. Comments
122 after # are ignored, EOF signals the end of fname any subsequent lines
123 will be ignored too. You can also supply additional options which will
124 be inherited to each child, e.g. When invoking testssl --wide --log
125 --file <fname> . Each single line in fname is parsed upon execution. If
126 there´s a conflicting option and serial mass testing option is being
127 performed the check will be aborted at the time it occurs and depending
128 on the output option potentially leaving you with an output file with‐
129 out footer. In parallel mode the mileage varies, likely a line won´t be
130 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 al‐
134 lowed. The ports can be different and will be tested by testssl accord‐
135 ing to common practice in the internet, i.e. if nmap shows in its out‐
136 put an open port 25, automatically -t smtp will be added before the URI
137 whereas port 465 will be treated as a plain TLS/SSL port, not requiring
138 an STARTTLS SMTP handshake upfront. This is done by an internal table
139 which correlates nmap´s open port detected to the STARTTLS/plain text
140 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 problem 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 bi‐
194 nary installed. CONNECT_TIMEOUT is the corresponding environment vari‐
195 able.
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 in‐
202 stalled. As there are different implementations of timeout: It automat‐
203 ically calls the binary with the right parameters. OPENSSL_TIMEOUT is
204 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 re‐
226 solving host(s) in <URI>. IPv6 addresses need to be supplied in square
227 brackets. --ip=one means: just test the first A record DNS returns
228 (useful for multiple IPs). If -6 and --ip=one was supplied an AAAA
229 record will be picked if available. The --ip option might be also use‐
230 ful 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 re‐
238 vocation 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 re‐
339 sult 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 / cipher
355 categories by strength. Those lists are (openssl ciphers $LIST, $LIST
356 from below:)
357
358 • NULL encryption ciphers: ´NULL:eNULL´
359
360 • Anonymous NULL ciphers: ´aNULL:ADH´
361
362 • Export ciphers (w/o the preceding ones): ´EXPORT:!ADH:!NULL´
363
364 • LOW (64 Bit + DES ciphers, without EXPORT ciphers):
365 ´LOW:DES:RC2:RC4:!ADH:!EXP:!NULL:!eNULL´
366
367 • 3DES + IDEA Ciphers: ´3DES:IDEA:!aNULL:!ADH´
368
369 • Average grade Ciphers: ´HIGH:MEDIUM:AES:CAMEL‐
370 LIA:ARIA:!IDEA:!CHACHA20:!3DES:!RC2:!RC4:!AESCCM8:!AESCCM:!AES‐
371 GCM:!ARIAGCM:!aNULL´
372
373 • Strong grade Ciphers (AEAD): ´AESGCM:CHACHA20:CamelliaGCM:AESCCM´
374
375
376
377 -f, --pfs, --fs,--nsa Checks robust (perfect) forward secrecy key ex‐
378 change. "Robust" means that ciphers having intrinsic severe weaknesses
379 like Null Authentication or Encryption, 3DES and RC4 won´t be consid‐
380 ered here. There shouldn´t be the wrong impression that a secure key
381 exchange has been taking place and everything is fine when in reality
382 the encryption sucks. Also this section lists the available elliptical
383 curves and Diffie Hellman groups, as well as FFDHE groups (TLS 1.2 and
384 TLS 1.3).
385
386 -p, --protocols checks TLS/SSL protocols SSLv2, SSLv3, TLS 1.0 through
387 TLS 1.3 and for HTTP: SPDY (NPN) and ALPN, a.k.a. HTTP/2. For TLS 1.3
388 several drafts (from 18 on) and final are supported and being tested
389 for.
390
391 -P, --preference displays the servers preferences: cipher order, with
392 used openssl client: negotiated protocol and cipher. If there´s a ci‐
393 pher order enforced by the server it displays it for each protocol
394 (openssl+sockets). If there´s not, it displays instead which ciphers
395 from the server were picked with each protocol.
396
397 -S, --server_defaults displays information from the server hello(s):
398
399 • Available TLS extensions,
400
401 • TLS ticket + session ID information/capabilities,
402
403 • session resumption capabilities,
404
405 • Time skew relative to localhost (most server implementations return
406 random values).
407
408 • Several certificate information
409
410 • signature algorithm,
411
412 • key size,
413
414 • key usage and extended key usage,
415
416 • fingerprints and serial
417
418 • Common Name (CN), Subject Alternative Name (SAN), Issuer,
419
420 • Trust via hostname + chain of trust against supplied certifi‐
421 cates
422
423 • EV certificate detection
424
425 • experimental "eTLS" detection
426
427 • validity: start + end time, how many days to go (warning for
428 certificate lifetime >=5 years)
429
430 • revocation info (CRL, OCSP, OCSP stapling + must staple). When
431 --phone-out supplied it checks against the certificate issuer
432 whether the host certificate has been revoked (plain OCSP,
433 CRL).
434
435 • displaying DNS Certification Authority Authorization resource
436 record
437
438 • Certificate Transparency info (if provided by server).
439
440
441
442
443
444
445 For the trust chain check 5 certificate stores are provided. If the
446 test against one of the trust stores failed, the one is being identi‐
447 fied and the reason for the failure is displayed - in addition the ones
448 which succeeded are displayed too. You can configure your own CA via
449 ADDITIONAL_CA_FILES, see section FILES below. If the server provides no
450 matching record in Subject Alternative Name (SAN) but in Common Name
451 (CN), it will be indicated as this is deprecated. Also for multiple
452 server certificates are being checked for as well as for the certifi‐
453 cate reply to a non-SNI (Server Name Indication) client hello to the IP
454 address. Regarding the TLS clock skew: it displays the time difference
455 to the client. Only a few TLS stacks nowadays still support this and
456 return the local clock gmt_unix_time, e.g. IIS, openssl < 1.0.1f. In
457 addition to the HTTP date you could e.g. derive that there are differ‐
458 ent hosts where your TLS and your HTTP request ended -- if the time
459 deltas differ significantly.
460
461 -x <pattern>, --single-cipher <pattern> tests matched pattern of ci‐
462 phers against a server. Patterns are similar to -V pattern , --local
463 pattern, see above about matching.
464
465 -h, --header, --headers if the service is HTTP (either by detection or
466 by enforcing via --assume-http. It tests several HTTP headers like
467
468 • HTTP Strict Transport Security (HSTS)
469
470 • HTTP Public Key Pinning (HPKP)
471
472 • Server banner
473
474 • HTTP date+time
475
476 • Server banner like Linux or other Unix vendor headers
477
478 • Application banner (PHP, RoR, OWA, SharePoint, Wordpress, etc)
479
480 • Reverse proxy headers
481
482 • Web server modules
483
484 • IPv4 address in header
485
486 • Cookie (including Secure/HTTPOnly flags)
487
488 • Decodes BIG IP F5 non-encrypted cookies
489
490 • Security headers (X-Frame-Options, X-XSS-Protection, Expect-CT,...
491 , CSP headers). Nonsense is not yet detected here.
492
493
494
495 -c, --client-simulation This simulates a handshake with a number of
496 standard clients so that you can figure out which client cannot or can
497 connect to your site. For the latter case the protocol, cipher and
498 curve is displayed, also if there´s Forward Secrecy. testssl uses a
499 handselected set of clients which are retrieved by the SSLlabs API. The
500 output is aligned in columns when combined with the --wide option. If
501 you want the full nine yards of clients displayed use the environment
502 variable ALL_CLIENTS.
503
504 -g, --grease checks several server implementation bugs like tolerance
505 to size limitations and GREASE, see https://www.ietf.org/ar‐
506 chive/id/draft-ietf-tls-grease-01.txt . This checks doesn´t run per de‐
507 fault.
508
509 VULNERABILITIES
510 -U, --vulnerable, --vulnerabilities Just tests all (of the following)
511 vulnerabilities. The environment variable VULN_THRESHLD determines af‐
512 ter which value a separate headline for each vulnerability is being
513 displayed. Default is 1 which means if you check for two vulnerabili‐
514 ties, only the general headline for vulnerabilities section is dis‐
515 played -- in addition to the vulnerability and the result. Otherwise
516 each vulnerability or vulnerability section gets its own headline in
517 addition to the output of the name of the vulnerability and test re‐
518 sult. A vulnerability section is comprised of more than one check, e.g.
519 the renegotiation vulnerability check has two checks, so has Logjam.
520
521 -H, --heartbleed Checks for Heartbleed, a memory leakage in openssl.
522 Unless the server side doesn´t support the heartbeat extension it is
523 likely that this check runs into a timeout. The seconds to wait for a
524 reply can be adjusted with HEARTBLEED_MAX_WAITSOCK. 8 is the default.
525
526 -I, --ccs, --ccs-injection Checks for CCS Injection which is an openssl
527 vulnerability. Sometimes also here the check needs to wait for a reply.
528 The predefined timeout of 5 seconds can be changed with the environment
529 variable CCS_MAX_WAITSOCK.
530
531 -T, --ticketbleed Checks for Ticketbleed memory leakage in BigIP load‐
532 balancers.
533
534 -BB, --robot Checks for vulnerability to ROBOT / (Return Of Bleichen‐
535 bacher´s Oracle Threat) attack.
536
537 -R, --renegotiation Tests renegotiation vulnerabilities. Currently
538 there´s a check for Secure Renegotiation and for Secure Client-Initi‐
539 ated Renegotiation. Please be aware that vulnerable servers to the lat‐
540 ter can likely be DoSed very easily (HTTP). A check for Insecure
541 Client-Initiated Renegotiation is not yet implemented.
542
543 -C, --compression, --crime Checks for CRIME (Compression Ratio
544 Info-leak Made Easy) vulnerability in TLS. CRIME in SPDY is not yet be‐
545 ing checked for.
546
547 -B, --breach Checks for BREACH (Browser Reconnaissance and Exfiltration
548 via Adaptive Compression of Hypertext) vulnerability. As for this vul‐
549 nerability HTTP level compression is a prerequisite it´ll be not tested
550 if HTTP cannot be detected or the detection is not enforced via `--as‐
551 sume-http. Please note that only the URL supplied (normally "/" ) is
552 being tested.
553
554 -O, --poodle Tests for SSL POODLE (Padding Oracle On Downgraded Legacy
555 Encryption) vulnerability. It basically checks for the existence of CBC
556 ciphers in SSLv3.
557
558 -Z, --tls-fallback Checks TLS_FALLBACK_SCSV mitigation. TLS_FALL‐
559 BACK_SCSV is basically a ciphersuite appended to the Client Hello try‐
560 ing to prevent protocol downgrade attacks by a Man in the Middle.
561
562 -W, --sweet32 Checks for vulnerability to SWEET32 by testing 64 bit
563 block ciphers (3DES, RC2 and IDEA).
564
565 -F, --freak Checks for FREAK vulnerability (Factoring RSA Export Keys)
566 by testing for EXPORT RSA ciphers
567
568 -D, --drown Checks for DROWN vulnerability (Decrypting RSA with Obso‐
569 lete and Weakened eNcryption) by checking whether the SSL 2 protocol is
570 available at the target. Please note that if you use the same RSA cer‐
571 tificate elsewhere you might be vulnerable too. testssl doesn´t check
572 for this but provides a helpful link @ censys.io which provides this
573 service.
574
575 -J, --logjam Checks for LOGJAM vulnerability by checking for DH EXPORT
576 ciphers. It also checks for "common primes" which are preconfigured DH
577 keys. DH keys =< 1024 Bit will be penalized. Also FFDHE groups (TLS
578 1.2) will be displayed here.
579
580 -A, --beast Checks BEAST vulnerabilities in SSL 3 and TLS 1.0 by test‐
581 ing the usage of CBC ciphers.
582
583 -L, --lucky13 Checks for LUCKY13 vulnerability. It checks for the pres‐
584 ence of CBC ciphers in TLS versions 1.0 - 1.2.
585
586 -4, --rc4, --appelbaum Checks which RC4 stream ciphers are being of‐
587 fered.
588
589 OUTPUT OPTIONS
590 -q, --quiet Normally testssl displays a banner on stdout with several
591 version information, usage rights and a warning. This option suppresses
592 it. Please note that by choosing this option you acknowledge usage
593 terms and the warning normally appearing in the banner.
594
595 --wide Except the "each cipher output" all tests displays the single
596 cipher name (scheme see below). This option enables testssl to display
597 also for the following sections the same output as for testing each ci‐
598 phers: BEAST, PFS, RC4. The client simulation has also a wide mode. The
599 difference here is restricted to a column aligned output and a proper
600 headline. The environment variable WIDE can be used instead.
601
602 --mapping <openssl|iana|no-openssl|no-iana>
603
604 • openssl: use the OpenSSL cipher suite name as the primary name ci‐
605 pher suite name form (default),
606
607 • iana: use the IANA cipher suite name as the primary name cipher
608 suite name form.
609
610 • no-openssl: don´t display the OpenSSL cipher suite name, display
611 IANA names only.
612
613 • no-iana: don´t display the IANA cipher suite name, display OpenSSL
614 names only.
615
616
617
618 Please note that in testssl 3,0 you can still use rfc instead of iana
619 and no-rfc instead of no-iana but it´ll disappear after 3.0.
620
621 --show-each This is an option for all wide modes only: it displays all
622 ciphers tested -- not only succeeded ones. SHOW_EACH_C is your friend
623 if you prefer to set this via the shell environment.
624
625 --color <0|1|2|3> determines the use of colors on the screen and in the
626 log file: 2 is the default and makes use of ANSI and termcap escape
627 codes on your terminal. 1 just uses non-colored mark-up like bold,
628 italics, underline, reverse. 0 means no mark-up at all = no escape
629 codes. This is also what you want when you want a log file without any
630 escape codes. 3 will color ciphers and EC according to an internal (not
631 yet perfect) rating. Setting the environment variable COLOR to the
632 value achieves the same result. Please not that OpenBSD and early Free‐
633 BSD do not support italics.
634
635 --colorblind Swaps green and blue colors in the output, so that this
636 percentage of folks (up to 8% of males, see
637 https://en.wikipedia.org/wiki/Color_blindness) can distinguish those
638 findings better. COLORBLIND is the according variable if you want to
639 set this in the environment.
640
641 --debug <0-6> This gives you additional output on the screen (2-6),
642 only useful for debugging. DEBUG is the according environment variable
643 which you can use. There are six levels (0 is the default, thus it has
644 no effect):
645
646 1. screen output normal but leaves useful debug output in
647 /tmp/testssl.XXXXXX/ . The info about the exact directory is in‐
648 cluded in the screen output in the end of the run.
649
650 2. lists more what´s going on, status (high level) and connection er‐
651 rors, a few general debug output
652
653 3. even slightly more info: hexdumps + other info
654
655 4. display bytes sent via sockets
656
657 5. display bytes received via sockets
658
659 6. whole 9 yards
660
661
662
663 FILE OUTPUT OPTIONS
664 --log, --logging Logs stdout also to ${NODE}-p${port}${YYYYM‐
665 MDD-HHMM}.log in current working directory of the shell. Depending on
666 the color output option (see above) the output file will contain color
667 and other markup escape codes, unless you specify --color 0 too. cat
668 and -- if properly configured less -- will show the output properly
669 formatted on your terminal. The output shows a banner with the almost
670 the same information as on the screen. In addition it shows the command
671 line of the testssl instance. Please note that the resulting log file
672 is formatted according to the width of your screen while running
673 testssl. You can override the width with the environment variable
674 TERM_WIDTH.
675
676 --logfile <logfile> or -oL <logfile> Instead of the previous option you
677 may want to use this one if you want to log into a directory or if you
678 rather want to specify the log file name yourself. If logfile is a di‐
679 rectory the output will put into logfile/${NODE}-p${port}${YYYYM‐
680 MDD-HHMM}.log. If logfile is a file it will use that file name, an ab‐
681 solute path is also permitted here. LOGFILE is the variable you need to
682 set if you prefer to work environment variables instead. Please note
683 that the resulting log file is formatted according to the width of your
684 screen while running testssl. You can override the width with the envi‐
685 ronment variable TERM_WIDTH.
686
687 --json Logs additionally to JSON file ${NODE}-p${port}${YYYYM‐
688 MDD-HHMM}.json in the current working directory of the shell. The re‐
689 sulting JSON file is opposed to --json-pretty flat -- which means each
690 section is self contained and has an identifier for each single check,
691 the hostname/IP address, the port, severity and the finding. For vul‐
692 nerabilities it may contain a CVE and CWE entry too. The output doesn´t
693 contain a banner or a footer.
694
695 --jsonfile <jsonfile> or -oj <jsonfile> Instead of the previous option
696 you may want to use this one if you want to log the JSON out put into a
697 directory or if you rather want to specify the log file name yourself.
698 If jsonfile is a directory the output will put into log‐
699 file/${NODE}-p${port}${YYYYMMDD-HHMM}.json. Ifjsonfile` is a file it
700 will use that file name, an absolute path is also permitted here.
701
702 --json-pretty Logs additionally to JSON file ${NODE}-p${port}${YYYYM‐
703 MDD-HHMM}.json in the current working directory of the shell. The re‐
704 sulting JSON file is opposed to--json` non-flat -- which means it is
705 structured. The structure contains a header similar to the banner on
706 the screen, including the command line, scan host, openssl binary used,
707 testssl version and epoch of the start time. Then for every test sec‐
708 tion of testssl it contains a separate JSON object/section. Each find‐
709 ing has a key/value pair identifier with the identifier for each single
710 check, the severity and the finding. For vulnerabilities it may contain
711 a CVE and CWE entry too. The footer lists the scan time in seconds.
712
713 --jsonfile-pretty <jsonfile> or -oJ <jsonfile> Similar to the aforemen‐
714 tioned --jsonfile or --logfile it logs the output in pretty JSON format
715 (see --json-pretty) into a file or a directory. For further explanation
716 see --jsonfile or --logfile.
717
718 --csv Logs additionally to a CSV file ${NODE}-p${port}${YYYYM‐
719 MDD-HHMM}.csv in the current working directory of the shell. The output
720 contains a header with the keys, the values are the same as in the flat
721 JSON format (identifier for each single check, the hostname/IP address,
722 the port, severity, the finding and for vulnerabilities a CVE and CWE
723 number).
724
725 --csvfile <csvfile> or -oC <csvfile> Similar to the aforementioned
726 --jsonfile or --logfile it logs the output in CSV format (see --cvs)
727 additionally into a file or a directory. For further explanation see
728 --jsonfile or --logfile.
729
730 --html Logs additionally to an HTML file ${NODE}-p${port}${YYYYM‐
731 MDD-HHMM}.html in the current working directory of the shell. It con‐
732 tains a 1:1 output of the console. In former versions there was a
733 non-native option to use "aha" (Ansi HTML Adapter:
734 github.com/theZiz/aha) like testssl [options] <URI> | aha >output.html.
735 This is not necessary anymore.
736
737 --htmlfile <htmlfile> or -oH <htmlfile> Similar to the aforementioned
738 --jsonfile or --logfile it logs the output in HTML format (see --html)
739 additionally into a file or a directory. For further explanation see
740 --jsonfile or --logfile.
741
742 -oA <filename> / --outFile <filename> Similar to nmap it does a file
743 output to all available file formats: LOG, JSON pretty, CSV, HTML. If
744 the filename supplied is equal auto the filename is automatically gen‐
745 erated using ´${NODE}-p${port}${YYYYMMDD-HHMM}.${EXT}´ with the accord‐
746 ing extension. If a directory is provided all output files will put
747 into <filename>/${NODE}-p${port}${YYYYMMDD-HHMM}.{log,json,csv,html}.
748
749 -oa <filename> / --outfile <filename> Does the same as the previous op‐
750 tion but uses flat JSON instead.
751
752 --hints This option is not in use yet. This option is meant to give
753 hints how to fix a finding or at least a help to improve something.
754 GIVE_HINTS is the environment variable for this.
755
756 --severity <severity> For CSV and both JSON outputs this will only add
757 findings to the output file if a severity is equal or higher than the
758 severity value specified. Allowed are <LOW|MEDIUM|HIGH|CRITICAL>. WARN
759 is another level which translates to a client-side scanning error or
760 problem. Thus you will always see them in a file if they occur.
761
762 --append Normally, if an output file already exists and it has a file
763 size greater zero, testssl will prompt you to manually remove the file
764 exit with an error. --append however will append to this file, without
765 a header. The environment variable APPEND does the same. Be careful us‐
766 ing this switch/variable. A complementary option which overwrites an
767 existing file doesn´t exist per design.
768
769 --outprefix <fname_prefix> Prepend output filename prefix fname_prefix
770 before ´${NODE}-´. You can use as well the environment variable
771 FNAME_PREFIX. Using this any output files will be named <fname_pre‐
772 fix>-${NODE}-p${port}${YYYYMMDD-HHMM}.<format> when no file name of the
773 respective output option was specified. If you do not like the separa‐
774 tor ´-´ you can as well supply a <fname_prefix> ending in ´.´, ´_´ or
775 ´,´. In this case or if you already supplied ´-´ no additional ´-´ will
776 be appended to <fname_prefix>.
777
778 A few file output options can also be preset via environment variables.
779
780 COLOR RATINGS
781 Testssl.sh makes use of (the eight) standard terminal colors. The color
782 scheme is as follows:
783
784 • light red: a critical finding
785
786 • red: a high finding
787
788 • brown: a medium finding
789
790 • yellow: a low finding
791
792 • green (blue if COLORBLIND is set): something which is either in
793 general a good thing or a negative result of a check which other‐
794 wise results in a high finding
795
796 • light green (light blue if COLORBLIND is set) : something which is
797 either in general a very good thing or a negative result of a check
798 which otherwise results in a critical finding
799
800 • no color at places where also a finding can be expected: a finding
801 on an info level
802
803 • cyan: currently only used for --show-each or an additional hint
804
805 • magenta: signals a warning condition, e.g. either a local lack of
806 capabilities on the client side or another problem
807
808 • light magenta: a fatal error which either requires strict consent
809 from the user to continue or a condition which leaves no other
810 choice for testssl to quit
811
812
813
814 What is labeled as "light" above appears as such on the screen but is
815 technically speaking "bold". Besides --color=3 will color ciphers ac‐
816 cording to an internal and rough rating.
817
818 Markup (without any color) is used in the following manner:
819
820 • bold: for the name of the test
821
822 • underline + bold: for the headline of each test section
823
824 • underline: for a sub-headline
825
826 • italics: for strings just reflecting a value read from the server
827
828
829
830 TUNING via ENV variables and more options
831 Except the environment variables mentioned above which can replace com‐
832 mand line options here a some which cannot be set otherwise. Variables
833 used for tuning are preset with reasonable values. There should be no
834 reason to change them unless you use testssl under special conditions.
835
836 • TERM_WIDTH is a variable which overrides the auto-determined termi‐
837 nal width size. Setting this variable normally only makes sense if
838 you log the output to a file using the --log, --logfile or -oL op‐
839 tion.
840
841 • DEBUG_ALLINONE / SETX: when setting one of those to true testssl
842 falls back to the standard bash behavior, i.e. calling bash -x
843 testssl it displays the bash debugging output not in an external
844 file /tmp/testssl-<XX>.log
845
846 • DEBUGTIME: Profiling option. When using bash´s debug mode and when
847 this is set to true, it generates a separate text file with epoch
848 times in /tmp/testssl-<XX>.time. They need to be concatenated by
849 paste /tmp/testssl-<XX>.{time,log}
850
851 • EXPERIMENTAL=true is an option which is sometimes used in the de‐
852 velopment process to make testing easier. In released versions this
853 has no effect.
854
855 • ALL_CLIENTS=true runs a client simulation with all (currently 126)
856 clients when testing HTTP.
857
858 • UNBRACKTD_IPV6: needs to be set to true for some old versions of
859 OpenSSL (like from Gentoo) which don´t support [bracketed] IPv6 ad‐
860 dresses
861
862 • NO_ENGINE: if you have problems with garbled output containing the
863 word ´engine´ you might want to set this to true. It forces testssl
864 not try to configure openssl´s engine or a non existing one from
865 libressl
866
867 • HEADER_MAXSLEEP: To wait how long before killing the process to re‐
868 trieve a service banner / HTTP header
869
870 • MAX_WAITSOCK: It instructs testssl to wait until the specified time
871 before declaring a socket connection dead. Don´t change this unless
872 you´re absolutely sure what you´re doing. Value is in seconds.
873
874 • CCS_MAX_WAITSOCK Is the similar to above but applies only to the
875 CCS handshakes, for both of the two the two CCS payload. Don´t
876 change this unless you´re absolutely sure what you´re doing. Value
877 is in seconds.
878
879 • HEARTBLEED_MAX_WAITSOCK Is the similar to MAX_WAITSOCK but applies
880 only to the ServerHello after sending the Heartbleed payload. Don´t
881 change this unless you´re absolutely sure what you´re doing. Value
882 is in seconds.
883
884 • MEASURE_TIME_FILE For seldom cases when you don´t want the scan
885 time to be included in the output you can set this to false.
886
887 • STARTTLS_SLEEP is per default set to 10 (seconds). That´s the value
888 testssl waits for a string in the STARTTLS handshake before giving
889 up.
890
891 • MAX_PARALLEL is the maximum number of tests to run in parallel in
892 parallel mass testing mode. The default value of 20 may be made
893 larger on systems with faster processors.
894
895 • MAX_WAIT_TEST is the maximum time (in seconds) to wait for a single
896 test in parallel mass testing mode to complete. The default is
897 1200.
898
899 • HSTS_MIN is preset to 179 (days). If you want warnings sooner or
900 later for HTTP Strict Transport Security you can change this.
901
902 • HPKP_MIN is preset to 30 (days). If you want warnings sooner or
903 later for HTTP Public Key Pinning you can change this
904
905 • DAYS2WARN1 is the first threshold when you´ll be warning of a cer‐
906 tificate expiration of a host, preset to 60 (days). For Let´s En‐
907 crypt this value will be divided internally by 2.
908
909 • DAYS2WARN2 is the second threshold when you´ll be warning of a cer‐
910 tificate expiration of a host, preset to 30 (days). For Let´s En‐
911 crypt this value will be divided internally by 2.
912
913 • TESTSSL_INSTALL_DIR is the derived installation directory of
914 testssl. Relatively to that the bin and mandatory etc directory
915 will be looked for.
916
917 • CA_BUNDLES_PATH: If you have an own set of CA bundles or you want
918 to point testssl to a specific location of a CA bundle, you can use
919 this variable to set the directory which testssl will use. Please
920 note that it overrides completely the builtin path of testssl which
921 means that you will only test against the bundles you point to.
922 Also you might want to use ~/utils/create_ca_hashes.sh to create
923 the hashes for HPKP.
924
925 • MAX_SOCKET_FAIL: A number which tells testssl how often a TCP
926 socket connection may fail before the program gives up and termi‐
927 nates. The default is 2. You can increase it to a higher value if
928 you frequently see a message like Fatal error: repeated openssl
929 s_client connect problem, doesn´t make sense to continue.
930
931 • MAX_OSSL_FAIL: A number which tells testssl how often an OpenSSL
932 s_client connect may fail before the program gives up and termi‐
933 nates. The default is 2. You can increase it to a higher value if
934 you frequently see a message like Fatal error: repeated TCP connect
935 problems, giving up.
936
937 • MAX_HEADER_FAIL: A number which tells testssl how often a HTTP GET
938 request over OpenSSL may return an empty file before the program
939 gives up and terminates. The default is 3. Also here you can in‐
940 crease the threshold when you spot messages like Fatal error: re‐
941 peated HTTP header connect problems, doesn´t make sense to con‐
942 tinue.
943
944
945
947 testssl testssl
948
949 does a default run on https://testssl (protocols, standard cipher
950 lists, PFS, server preferences, server defaults, vulnerabilities, test‐
951 ing all known 370 ciphers, client simulation.
952
953
954
955 testssl testssl.net:443
956
957
958
959 does the same default run as above with the subtle difference that
960 testssl.net has two IPv4 addresses. Both are tested.
961
962
963
964 testssl --ip=one --wide https://testssl.net:443
965
966
967
968 does the same checks as above, with the difference that one IP address
969 is being picked randomly. Displayed is everything where possible in
970 wide format.
971
972
973
974 testssl -6 https://testssl.net
975
976
977
978 As opposed to the first example it also tests the IPv6 part -- supposed
979 you have an IPv6 network and your openssl supports IPv6 (see above).
980
981
982
983 testssl -t smtp smtp.gmail.com:25
984
985
986
987 Checks are done via a STARTTLS handshake on the plain text port 25. It
988 checks every IP on smtp.gmail.com.
989
990
991
992 testssl --starttls=imap imap.gmx.net:143
993
994
995
996 does the same on the plain text IMAP port.
997
998 Please note that for plain TLS-encrypted ports you must not specify the
999 protocol option when no STARTTLS handshake is offered: testssl
1000 smtp.gmail.com:465 just checks the encryption on the SMTPS port,
1001 testssl imap.gmx.net:993 on the IMAPS port. Also MongoDB which provides
1002 TLS support without STARTTLS can be tested directly.
1003
1005 • RFC 2246: The TLS Protocol Version 1.0
1006
1007 • RFC 2818: HTTP Over TLS
1008
1009 • RFC 2595: Using TLS with IMAP, POP3 and ACAP
1010
1011 • RFC 3207: SMTP Service Extension for Secure SMTP over Transport
1012 Layer Security
1013
1014 • RFC 3501: INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1
1015
1016 • RFC 4346: The Transport Layer Security (TLS) Protocol Version 1.1
1017
1018 • RFC 4366: Transport Layer Security (TLS) Extensions
1019
1020 • RFC 4492: Elliptic Curve Cryptography (ECC) Cipher Suites for
1021 Transport Layer Security (TLS)
1022
1023 • RFC 5077: Transport Layer Security (TLS) Session Resumption
1024
1025 • RFC 5246: The Transport Layer Security (TLS) Protocol Version 1.2
1026
1027 • RFC 5280: Internet X.509 Public Key Infrastructure Certificate and
1028 Certificate Revocation List (CRL) Profile
1029
1030 • RFC 5321: Simple Mail Transfer Protocol
1031
1032 • RFC 5746: Transport Layer Security (TLS) Renegotiation Indication
1033 Extension
1034
1035 • RFC 6066: Transport Layer Security (TLS) Extensions: Extension Def‐
1036 initions
1037
1038 • RFC 6101: The Secure Sockets Layer (SSL) Protocol Version 3.0
1039
1040 • RFC 6120: Extensible Messaging and Presence Protocol (XMPP): Core
1041
1042 • RFC 6125: Domain-Based Application Service Identity [..]
1043
1044 • RFC 6797: HTTP Strict Transport Security (HSTS)
1045
1046 • RFC 6961: The Transport Layer Security (TLS) Multiple Certificate
1047 Status Request Extension
1048
1049 • RFC 7469: Public Key Pinning Extension for HTTP (HPKP)
1050
1051 • RFC 7507: TLS Fallback Signaling Cipher Suite Value (SCSV) for Pre‐
1052 venting Protocol Downgrade Attacks
1053
1054 • RFC 7627: Transport Layer Security (TLS) Session Hash and Extended
1055 Master Secret Extension
1056
1057 • RFC 7633: X.509v3 Transport Layer Security (TLS) Feature Extension
1058
1059 • RFC 7465: Prohibiting RC4 Cipher Suites
1060
1061 • RFC 7685: A Transport Layer Security (TLS) ClientHello Padding Ex‐
1062 tension
1063
1064 • RFC 7905: ChaCha20-Poly1305 Cipher Suites for Transport Layer Secu‐
1065 rity (TLS)
1066
1067 • RFC 7919: Negotiated Finite Field Diffie-Hellman Ephemeral Parame‐
1068 ters for Transport Layer Security
1069
1070 • RFC 8143: Using Transport Layer Security (TLS) with Network News
1071 Transfer Protocol (NNTP)
1072
1073 • RFC 8446: The Transport Layer Security (TLS) Protocol Version 1.3
1074
1075 • W3C CSP: Content Security Policy Level 1-3
1076
1077 • TLSWG Draft: The Transport Layer Security (TLS) Protocol Version
1078 1.3
1079
1080
1081
1083 • 0 testssl finished successfully without errors and without ambigu‐
1084 ous results
1085
1086 • 1 testssl has encountered exactly one ambiguous situation or an er‐
1087 ror during run
1088
1089 • 1+n same as previous. The errors or ambiguous results are added,
1090 also per IP.
1091
1092 • 50-200 reserved for returning a vulnerability scoring for system
1093 monitoring or a CI tools
1094
1095 • 242 (ERR_CHILD) Child received a signal from master
1096
1097 • 244 (ERR_RESOURCE) Resources testssl needs couldn´t be read
1098
1099 • 245 (ERR_CLUELESS) Weird state, either though user options or
1100 testssl
1101
1102 • 246 (ERR_CONNECT) Connectivity problem
1103
1104 • 247 (ERR_DNSLOOKUP) Problem with resolving IP addresses or names
1105
1106 • 248 (ERR_OTHERCLIENT) Other client problem
1107
1108 • 249 (ERR_DNSBIN) Problem with DNS lookup binaries
1109
1110 • 250 (ERR_OSSLBIN) Problem with OpenSSL binary
1111
1112 • 251 (ERR_NOSUPPORT) Feature requested is not supported
1113
1114 • 252 (ERR_FNAMEPARSE) Input file couldn´t be parsed
1115
1116 • 253 (ERR_FCREATE) Output file couldn´t be created
1117
1118 • 254 (ERR_CMDLINE) Cmd line couldn´t be parsed
1119
1120 • 255 (ERR_BASH) Bash version incorrect
1121
1122
1123
1125 etc/*pem are the certificate stores from Apple, Linux, Mozilla Firefox,
1126 Windows and Java.
1127
1128 etc/client-simulation.txt contains client simulation data.
1129
1130 etc/cipher-mapping.txt provides a mandatory file with mapping from
1131 OpenSSL cipher suites names to the ones from IANA / used in the RFCs.
1132
1133 etc/tls_data.txt provides a mandatory file for ciphers (bash sockets)
1134 and key material.
1135
1137 Developed by Dirk Wetter, David Cooper and many others, see CREDITS.md
1138 .
1139
1141 Copyright © 2012 Dirk Wetter. License GPLv2: Free Software Foundation,
1142 Inc. This is free software: you are free to change and redistribute it
1143 under the terms of the license, see LICENSE.
1144
1145 Attribution is important for the future of this project - also in the
1146 internet. Thus if you´re offering a scanner based on testssl.sh as a
1147 public and/or paid service in the internet you are strongly encouraged
1148 to mention to your audience that you´re using this program and where to
1149 get this program from. That helps us to get bugfixes, other feedback
1150 and more contributions.
1151
1152 Usage WITHOUT ANY WARRANTY. USE at your OWN RISK!
1153
1155 All native Windows platforms emulating Linux are known to be slow.
1156
1158 Probably. Current known ones and interface for filing new ones:
1159 https://testssl.sh/bugs/ .
1160
1162 ciphers(1), openssl(1), s_client(1), x509(1), verify(1), ocsp(1),
1163 crl(1), bash(1) and the websites https://testssl.sh/ and
1164 https://github.com/drwetter/testssl.sh/ .
1165
1166
1167
1168 January 2020 TESTSSL(1)