testssl icon

Super | Contra S Power 30 Lives Nes Fix


testssl.sh

is a free command line tool which checks a server's service on any port for the support of TLS/SSL ciphers, protocols as well as recent cryptographic flaws and more.

Super | Contra S Power 30 Lives Nes Fix

Before we discuss the "fix," we must acknowledge what Konami actually gave us. There is a legitimate way to get 30 lives in Super Contra, but it is not a start-up code. It is a Level Select + 30 Lives code.

To perform this, do the following on the title screen (where it says "Super C" or "Super Contra"):

Wait—did you just do the code twice? Yes.

If done correctly, you will see a stage number (0-7) blinking. Use Up/Down to choose your stage. Press Start. You now have 30 lives. However, there is a catch: You start with the standard rifle, not the S-Power.

This is the official "30 lives" mechanic, but it fails the "S-Power" part of the fix. You still have to survive long enough to find an S-Power icon, which usually sits right in the middle of a kill zone.

Super C (known as Super Contra in some regions) is a beloved NES classic, but players have long struggled with its infamous difficulty. While the original Contra featured the legendary Konami Code (Up, Up, Down, Down, Left, Right, Left, Right, B, A, Start) for 30 lives, many fans believe the same code should work in Super C. The truth is a bit more complicated—but there is a fix.

In Super Contra, the existence of a similar cheat code was highly anticipated. Gamers sought a way to make the game more manageable, given its steep difficulty curve. The code, often referred to as the "Super Contra S Power 30 Lives NES Fix," promised to alleviate some of that difficulty by granting players an additional 30 lives.

The code itself was not as universally known or documented as the original Konami Code, partly because it was specific to Super Contra and required precise input. However, once discovered, it revolutionized how players approached the game. The code was typically entered at the title screen and, when done correctly, allowed players to start their journey through the game with a significantly reduced risk of returning to the beginning.

The "Super Contra S Power 30 Lives NES Fix" represents more than just a cheat code; it's a piece of gaming history that encapsulates the spirit of the NES era. It symbolizes the ingenuity and perseverance of gamers who sought to enhance their experience with classic titles. For those who played Super Contra, discovering and utilizing this code was a rite of passage, offering a sense of accomplishment and a deeper appreciation for the game's design.

As gaming continues to evolve, the allure of retro games and their secrets remains strong. The nostalgia for classic titles and the challenges they posed continues to inspire new generations of gamers. The legend of the "Super Contra S Power 30 Lives NES Fix" and similar cheat codes serves as a reminder of the creative and communal aspects of gaming culture, ensuring that these classic games remain relevant and enjoyable, even decades after their initial release.

To get 30 lives and effectively "fix" the limited life count in the North American version of Super C

(the NES sequel to Contra), you need to use a specific button sequence that differs from the classic Konami code.

In the North American release, the standard code only grants 10 lives, while the same code in Japanese and European versions provides the full 30 lives. 1. Extra Lives Cheat Codes

The sequence must be entered at the Title Screen before the game begins.

North American Version (10 Lives):Right, Left, Down, Up, A, B, Start. super contra s power 30 lives nes fix

Japanese (Super Contra) & European (Probotector II) Versions (30 Lives):Right, Left, Down, Up, A, B, Start.(Note: Some Japanese versions may require just Right, Left, Down, Up, A + B.) 2. S-Power (Spread Shot) Advantage

While there is no single "cheat code" to permanently lock the Spread Shot (S) power-up, you can maintain it more easily using the life-buffer provided by the 30-lives fix.

Weapon Preservation: In Super C, you lose your current power-up upon death. Starting with 10 or 30 lives allows you more "mistakes" while holding the Spread Shot, which is widely considered the best weapon for clearing stages.

Two-Player Life Stealing: If you are playing with a partner and lose your Spread Shot along with your last life, you can "steal" a life from the other player by pressing A + B simultaneously while dead to get back in the action. 3. Additional Secret: Sound Test

If you want to verify your inputs are working or just listen to the soundtrack, you can access a hidden menu:

Sound Mode: At the title screen, hold A + B and press Start. NES Super Contra: Secret Extra Lives Trick!

The urban legend began on a flickering CRT in a basement in 1990. Toby, a ten-year-old with calloused thumbs, was convinced he’d found the "God Hex." He claimed that if you held Select and Start while blowing into the cartridge at a 45-degree angle, the title screen’s "30 Lives" cheat would evolve.

Thirty years later, an indie dev named Elias found Toby’s old cartridge at a garage sale. Scrawled on the back in Sharpie was a string of hexadecimal code: S-30-FIX-99.

When Elias plugged it into his modded NES, the game didn't just give him 30 lives; it gave him infinite ones, but at a cost. Every time Bill Rizer died and respawned, the screen glitched. The jungle grew darker. The alien bosses started whispering Elias’s own search history through the 8-bit speakers.

He realized the "Fix" wasn't a patch for the player—it was a patch for the game's villains. They were tired of losing to a cheat code. By the final stage, the screen went black, leaving only a single line of text:

"30 LIVES IS A CRUTCH. FINISH THE MISSION ON ONE, OR THE CARTRIDGE STAYS ON FOREVER."

Elias played for seventy-two hours straight, fueled by cold coffee and terror, knowing that if the red light on the console went out, he might just go out with it.

Should we delve into the specific gameplay mechanics of this haunted version, or do you want to see the secret ending Elias discovered?

In the annals of retro gaming, few topics spark as much nostalgic debate as the "30 Lives" discrepancy in Super Contra Before we discuss the "fix," we must acknowledge

(known as Super C on the NES). While the original Contra famously popularized the Konami Code (

) to grant 30 lives, its sequel introduced a "fix" that frustrated North American players for decades. The Discrepancy: 10 vs. 30 Lives

For the North American NES release of Super C, developers replaced the standard Konami Code with a new sequence: Right, Left, Down, Up, A, B, Start. However, this new code only grants 10 lives in the US version, whereas the exact same input provides the full 30 lives in the Japanese (Famicom) and European (PAL) versions. North American NES (Super C):

→,←,↓,↑,A,B,Startright arrow comma left arrow comma down arrow comma up arrow comma cap A comma cap B comma cap S t a r t = 10 Lives Japanese Famicom (Super Contra):

→,←,↓,↑,A,B,Startright arrow comma left arrow comma down arrow comma up arrow comma cap A comma cap B comma cap S t a r t = 30 Lives European NES (Probotector II):

→,←,↓,↑,A,B,Startright arrow comma left arrow comma down arrow comma up arrow comma cap A comma cap B comma cap S t a r t = 30 Lives The "Fix" and Cultural Impact

This reduction was likely a deliberate attempt by Konami to increase the game's difficulty for the US market, which was often perceived as preferring more "unforgiving" arcade-style challenges to extend playtime. In response, the modding community eventually developed "fixes" or patches to restore the 30-life count to the US version, bringing it in line with its international counterparts and its legendary predecessor. Summary of Codes for Super C (NES) NES Super Contra: Secret Extra Lives Trick!

Leo stared at the flickering CRT screen, the "Game Over" music mocking him for the tenth time that night. Super Contra on the NES was a masterpiece of cruelty, and he was down to his last cigarette and his last bit of patience.

He wasn’t just a gamer; he was a digital archeologist. He’d heard rumors on an old BBS forum about "Power 30"—not just the standard Konami code, but a legendary "S-Power" glitch that supposedly granted 30 lives and permanent Spread-gun fire.

He cracked his knuckles and pulled the cartridge. He didn’t just blow on the pins; he took a Q-tip and rubbing alcohol to the copper teeth until they gleamed. "Talk to me," he whispered.

He shoved the gray plastic slab back into the toaster-style NES. Click-clack.

Power on. The title screen surged to life with that iconic, driving bassline. Bill and Lance stood defiant against a backdrop of alien carnage. Leo didn't press Start. He waited for the demo to loop exactly three times.

On the fourth loop, just as the first alien soldier exploded into pixels, he entered the sequence: Right, Left, Down, Up, A, B, Start.

The screen didn't just flash; it hummed. A low-frequency vibration rattled his coffee mug. The "Super Contra" logo shifted from orange to a piercing, neon violet. He hit Start. Wait—did you just do the code twice

The jungle level loaded, but it was different. The music was faster, more aggressive. When Bill landed on the soil, he wasn't holding the standard pea-shooter. He was carrying a shimmering, translucent cannon. Leo tapped 'B'.

A wall of red orbs filled the screen. It wasn't just the Spread gun; it was every power-up combined. Fireballs spiraled within the spread, and the bullets tracked enemies with predatory heat-seeking logic.

He looked at the top left corner. The life counter didn't say 03. It showed a pulsing, golden 30.

Leo moved like a god. He didn't dodge the snipers; he erased them before they could pull the trigger. The bosses—the giant tank, the skeletal alien heart—melted in seconds under the "S-Power" barrage. He felt the controller heating up in his hands, the plastic softening, but he couldn't let go. He was seeing frames of animation that shouldn't exist, secret paths through the fortress walls that led into a digital void.

By the time he reached the final hive, the room was glowing with the violet light of the screen. He pulled the trigger one last time, the Spread-power shattering the alien brain into a thousand sparkling fragments. The screen went black. No credits. No "Congratulation."

Just one line of white text on the dark abyss:SYSTEM FIXED. LIVES REMAINING: 30. SEE YOU IN THE REAL WAR.

The NES clicked off. Leo sat in the dark, the smell of ozone lingering in the air. He looked at his hands—they were trembling. He reached for the console, but the cartridge slot was empty. The game was gone.

He walked to the window and looked out at the city. For a split second, the red lights of the skyscrapers looked exactly like the pulsing eyes of the alien snipers. He gripped the windowsill, his thumb instinctively twitching as if seeking a button. The fix worked. But the game wasn't over.

Should we explore a sequel where Leo finds the next "fixed" cartridge, or

Cheat codes have been a part of gaming culture since the early days of video games. On the NES, these codes were often discovered through community efforts, trial and error, and sometimes, through tips shared in gaming magazines. The most famous of these, perhaps, is the "Konami Code," which originated in the 1986 game "Contra." Entering the sequence Up, Up, Down, Down, Left, Right, Left, Right, B, A, Start would grant the player 30 extra lives. This code became a cultural phenomenon, symbolizing a kind of secret handshake between gamers.

In the pantheon of the Nintendo Entertainment System, few games commanded the raw, adrenaline-soaked respect of Super C. As the sequel to the legendary Contra, it promised more aliens, more bullets, and more opportunities for humiliating death. Yet, for the generation of gamers who cut their teeth on 8-bit difficulty, Super C presented a unique problem. The original Contra’s famous “Konami Code” (Up, Up, Down, Down, Left, Right, Left, Right, B, A, Start) had become a cultural life raft. But when players eagerly typed that sacred sequence into Super C, they were met with silence. No extra lives. No digital safety net. This wasn’t a bug; it was a deliberate fix. Analyzing this change reveals a fascinating dialogue between game designers and players about the nature of challenge, fairness, and the very definition of victory.

The first layer of this “fix” is a matter of technical and philosophical evolution. In the original Contra, the 30-lives code was arguably a concession. The game was notoriously brutal, with limited continues and hits that stripped your weapon power. The code lowered the barrier to entry, allowing casual players to see the alien heart of the game. However, by the time Super C launched in 1990, Konami had observed player behavior. Gamers had become proficient. The code, originally a debugging tool from the arcade game Gradius, had transformed from a secret into a crutch. By removing the 30-lives code from its original form, Konami issued a challenge: You’ve mastered the safety net. Now play the real game. The fix forced players to rely on the new “flame thrower” power-up and tighter level design, trusting that their muscle memory from the first game was enough.

Yet, the story doesn’t end with removal. The true genius of Super C’s “fix” lies in the alternate code. Konami didn’t remove the possibility of extra lives; they hid it behind a more demanding, context-sensitive input. The famous 30-life code for Super C is: Up, Up, Down, Down, Left, Right, Left, Right, B, A, A, B, Select, Start (for two players). This alteration is crucial. The extra “A, A, B” and the requirement to hit “Select” before “Start” transforms the code from a casual chant into a ritual. It requires precision. It requires memory. In essence, Konami fixed the original code by turning it into a reward for mastery, not a handout. You had to prove you deserved the lives by correctly executing a more complex sequence during the title screen—a meta-game before the game even began.

This “fix” also highlights a shift in the player-developer social contract. The original Contra code felt like a backdoor secret, a wink from the programmer. The Super C code feels like a puzzle. By altering the sequence, Konami forced players to communicate. Without the internet, the rumor mill churned: “I heard it’s B, A, A, B now.” “No, you have to hold Select.” This collaborative detective work rebuilt the aura of mystery that the original code had lost through overexposure. The 30 lives weren’t gone; they were simply hidden again, restoring the thrill of discovery. The fix didn’t lower the difficulty; it raised the stakes of secret-finding.

Ultimately, the “Super C 30 Lives NES fix” is a case study in how constraints breed creativity. By breaking the original Konami Code, Konami forced a generation of players to either play the game legitimately—learning the patterns of the overhead levels and the sprint to the Alien’s Lair—or to hunt for the new, more elusive truth. The fix ensured that Super C was not merely Contra 2.0; it was a distinct trial. For those who mastered the new code, the 30 lives felt earned, a tactical advantage rather than a cheat. For those who didn’t, they discovered that Super C without a net is a relentless, beautiful ballet of destruction. In breaking a sacred tradition, Konami fixed something more important than a line of code: they fixed the player’s courage.



Key features

License

testssl.sh is free and open source software. You can use it under the terms of GPLv2, please review the License before using it.

Attribution is important for the future of this project -- also in the internet. Thus if you're offering a scanner based on testssl.sh as a public and/or paid service in the internet you are strongly encouraged to mention to your audience that you're using this program and where to get this program from. That helps us to get bugfixes, other feedback and more contributions.

Donations

If you like this software, you or your company uses it a lot or even your company makes money from any service around testssl.sh, why not support the project with a donation? It helps keeping the project alive and kicking.

Dirk setup a paypal account for it, keeps track of the money and makes sure it is spend on project related activities.

Donate with PayPal


If you want a deductable commercial invoice in return please get in touch with me before using paypal.

Development

github Development takes place at github. We're now @ 3.2.3 (stable) and 3.3dev.
There was a last release of 3.0.10 (oldstable) but that was the last one in the 3.0.x branch.



Support status

Supported will always be the current dev version and the version before (n-1 rule). As soon as the dev version becomes the stable release, this will be the n-1 version and receives bugfixes only. The dev version has historically not delivered really broken software (no facebook paradigm). Consider it like a rolling release: It'll definitely change-- that is the point of development-- things might break for you if you e.g. expect the output or features all to be the same. But other than that: The dev version itself won't break (TM).

3.2 is the stable branch. There was one final 3.0.10 release, a.k.a the old stable. If you need longer support for 3.0.x there's a possibility for paid maintenance support. We are focussing on 3.3dev, further development will take place in that branch. We aim to not break things badly but, as said, things will change. If you want to make use of new features like QUIC, TLS 1.3 0-RTT, newer SSLlabs rating, check for the Opossum vulnerability and more, you should consider this branch.

-

February 13, 2026: Prerelease/snapshot of 3.3dev, see github or here (signature) .

February 12, 2026: Release of bugfixed version 3.2.3, see 3.2.3 github or here (signature) .

September 18, 2025: Release of bugfixed version 3.2.2, see 3.2.2 github or here (signature) .

June 15, 2025: Start of new development branch 3.3dev, see 3.3dev github.

June 15,2025: Release of final bugfixed version 3.0.10, see 3.0.10 github or here (signature) .

June 13, 2025: Release of bugfixed version 3.2.1, see 3.2.1 @ github or here (signature) .

April 23, 2025: Release of final stable version 3.2.0, after several release candidates. see 3.2.0 @ github or here (signature) .

Jun 13, 2024: Version 3.0.9, see 3.0.9 @ github or here(signature) .

Oct 10, 2023: After several non-tagged and not labelled rc versions a now version 3.2rc3 was released, see 3.2rc3 @ github

Sep 19, 2022: Version 3.0.8, see 3.0.8 @ github or here(signature) .

Feb 19, 2022: Version 3.0.7, see 3.0.7 @ github or here(signature) .
[..]
Jan 23, 2020: Version 3.0 release, see 3.0 @ github. It's been a long rolling release candidate phase since the first 3.0 RC version.

Dec 12, 2017: ROBOT / Bleichenbacher check has been implemented. . Read more about this old+new attack @ robotattack.org. Please checkout 2.9dev @ github. I compiled also some info here, including an Alexa Top 10k scan and some background information.

Sep 19, 2017: Version 2.9.5 has been released. Please checkout 2.9.5 @ github or download it from here, you need the etc tar ball as well.

Screenshots /Pictures here

The pictures are still from an older version of testssl.sh. This will be updated later. It should suffice to get a picture though.

Longer read

testssl.sh is pretty much portable/compatible. It is working on every Linux, Mac OS X, FreeBSD distribution, on MSYS2/Cygwin (slow). It is supposed also to work on any other unixoid systems. A newer OpenSSL version (1.0) is recommended though. /bin/bash is a prerequisite – otherwise there would be no sockets.

Speaking of it: Since version 2.4 some of the checks were done with bash sockets. This improved gradually and from 2.9.5 on almost every check is done with bash sockets. Still OpenSSL is needed for some core functions like openssl <verify|ocsp|pkey> . In principle any OpenSSL or even LibreSSL can be used as a helper. It's recommended to use the one supplied as it makes sure special tests or features like IPv6, proxy support, STARTTLS MySQL or PostgreSQL are supported. (The one supplied stems originally from github.com/PeterMosmans/openssl. openssl-1.0.2k-chacha.pm.ipv6.Linux+FreeBSD.tar.gz is a Linux- and FreeBSD-only tarball. The directory openssl-1.0.2i-chacha.pm.ipv6.contributed/ contains contributed builds for ARM7l and Darwin binaries).

Download shortcuts

Note the following features are supported by the webserver configuration: – each to standard output. Please note however that from 2.9dev on you need the mandatory files in etc/ though, see https://github.com/testssl/testssl.sh/tree/3.0/etc.

Usage

The normal use case is probably just testssl.sh <hostname>, see first picture right hand above (a deliberately bad configuration).

Starting testssl.sh with no params will give you a general idea how to use it:
userid@somehost:~ % testssl.sh

     "testssl.sh [options] <URI>"    or    "testssl.sh <options>"


"testssl.sh <options>", where <options> is:

     --help                        what you're looking at
     -b, --banner                  displays banner + version of testssl.sh
     -v, --version                 same as previous
     -V, --local                   pretty print all local ciphers
     -V, --local <pattern>         which local ciphers with <pattern> are available? If pattern is not a number: word match

     <pattern>                     is always an ignore case word pattern of cipher hexcode or any other string in the name, kx or bits

"testssl.sh <URI>", where <URI> is:

     <URI>                         host|host:port|URL|URL:port   port 443 is default, URL can only contain HTTPS protocol)

"testssl.sh [options] <URI>", where [options] is:

     -t, --starttls <protocol>     Does a default run against a STARTTLS enabled <protocol,
                                   protocol is <ftp|smtp|lmtp|pop3|imap|xmpp|telnet|ldap|nntp|postgres|mysql>
     --xmpphost <to_domain>        For STARTTLS enabled XMPP it supplies the XML stream to-'' domain -- sometimes needed
     --mx <domain/host>            Tests MX records from high to low priority (STARTTLS, port 25)
     --file/-iL <fname>            Mass testing option: Reads one testssl.sh command line per line from <fname>.
                                   Can be combined with --serial or --parallel. Implicitly turns on "--warnings batch".
                                   Text format 1: Comments via # allowed, EOF signals end of <fname>
                                   Text format 2: nmap output in greppable format (-oG), 1 port per line allowed
     --mode <serial|parallel>      Mass testing to be done serial (default) or parallel (--parallel is shortcut for the latter)
     --warnings <batch|off>        "batch" doesn't continue when a testing error is encountered, off continues and skips warnings
     --connect-timeout <seconds>   useful to avoid hangers. Max <seconds> to wait for the TCP socket connect to return
     --openssl-timeout <seconds>   useful to avoid hangers. Max <seconds> to wait before openssl connect will be terminated

single check as <options>  ("testssl.sh URI" does everything except -E and -g):
     -e, --each-cipher             checks each local cipher remotely
     -E, --cipher-per-proto        checks those per protocol
     -s, --std, --standard         tests certain lists of cipher suites by strength
     -p, --protocols               checks TLS/SSL protocols (including SPDY/HTTP2)
     -g, --grease                  tests several server implementation bugs like GREASE and size limitations
     -S, --server-defaults         displays the server's default picks and certificate info
     -P, --server-preference       displays the server's picks: protocol+cipher
     -x, --single-cipher <pattern> tests matched <pattern> of ciphers
                                   (if <pattern> not a number: word match)
     -c, --client-simulation       test client simulations, see which client negotiates with cipher and protocol
     -h, --header, --headers       tests HSTS, HPKP, server/app banner, security headers, cookie, reverse proxy, IPv4 address

     -U, --vulnerable              tests all (of the following) vulnerabilities (if applicable)
     -H, --heartbleed              tests for Heartbleed vulnerability
     -I, --ccs, --ccs-injection    tests for CCS injection vulnerability
     -T, --ticketbleed             tests for Ticketbleed vulnerability in BigIP loadbalancers
     -BB, --robot                  tests for Return of Bleichenbacher's Oracle Threat (ROBOT) vulnerability
     -R, --renegotiation           tests for renegotiation vulnerabilities
     -C, --compression, --crime    tests for CRIME vulnerability (TLS compression issue)
     -B, --breach                  tests for BREACH vulnerability (HTTP compression issue)
     -O, --poodle                  tests for POODLE (SSL) vulnerability
     -Z, --tls-fallback            checks TLS_FALLBACK_SCSV mitigation
     -W, --sweet32                 tests 64 bit block ciphers (3DES, RC2 and IDEA): SWEET32 vulnerability
     -A, --beast                   tests for BEAST vulnerability
     -L, --lucky13                 tests for LUCKY13
     -F, --freak                   tests for FREAK vulnerability
     -J, --logjam                  tests for LOGJAM vulnerability
     -D, --drown                   tests for DROWN vulnerability
     -f, --pfs, --fs, --nsa        checks (perfect) forward secrecy settings
     -4, --rc4, --appelbaum        which RC4 ciphers are being offered?

tuning / connect options (most also can be preset via environment variables):
     --fast                        omits some checks: using openssl for all ciphers (-e), show only first preferred cipher.
     -9, --full                    includes tests for implementation bugs and cipher per protocol (could disappear)
     --bugs                        enables the "-bugs" option of s_client, needed e.g. for some buggy F5s
     --assume-http                 if protocol check fails it assumes HTTP protocol and enforces HTTP checks
     --ssl-native                  fallback to checks with OpenSSL where sockets are normally used
     --openssl <PATH>              use this openssl binary (default: look in $PATH, $RUN_DIR of testssl.sh)
     --proxy <host:port|auto>      (experimental) proxy connects via <host:port>, auto: values from $env ($http(s)_proxy)
     -6                            also use IPv6. Works only with supporting OpenSSL version and IPv6 connectivity
     --ip <ip>                     a) tests the supplied <ip> v4 or v6 address instead of resolving host(s) in URI
                                   b) arg "one" means: just test the first DNS returns (useful for multiple IPs)
     -n, --nodns <min|none>        if "none": do not try any DNS lookups, "min" queries A, AAAA and MX records
     --sneaky                      leave less traces in target logs: user agent, referer
     --ids-friendly                skips a few vulnerability checks which may cause IDSs to block the scanning IP
     --phone-out                   allow to contact external servers for CRL download and querying OCSP responder
     --add-ca <cafile>             path to <cafile> or a comma separated list of CA files enables test against additional CAs.
     --basicauth <user:pass>       provide HTTP basic auth information.

output options (can also be preset via environment variables):
     --quiet                       don't output the banner. By doing this you acknowledge usage terms normally appearing in the banner
     --wide                        wide output for tests like RC4, BEAST. PFS also with hexcode, kx, strength, RFC name
     --show-each                   for wide outputs: display all ciphers tested -- not only succeeded ones
     --mapping <openssl|           openssl: use the OpenSSL cipher suite name as the primary name cipher suite name form (default)
                iana|rfc             -> use the IANA/(RFC) cipher suite name as the primary name cipher suite name form
                no-openssl|          -> don't display the OpenSSL cipher suite name, display IANA/(RFC) names only
                no-iana|no-rfc>      -> don't display the IANA/(RFC) cipher suite name, display OpenSSL names only
     --color <0|1|2|3>             0: no escape or other codes,  1: b/w escape codes,  2: color (default), 3: extra color (color all ciphers)
     --colorblind                  swap green and blue in the output
     --debug <0-6>                 1: screen output normal but keeps debug output in /tmp/.  2-6: see "grep -A 5 '^DEBUG=' testssl.sh"

file output options (can also be preset via environment variables)
     --log, --logging              logs stdout to '${NODE}-p${port}${YYYYMMDD-HHMM}.log' in current working directory (cwd)
     --logfile|-oL <logfile>       logs stdout to 'dir/${NODE}-p${port}${YYYYMMDD-HHMM}.log'. If 'logfile' is a dir or to a specified 'logfile'
     --json                        additional output of findings to flat JSON file '${NODE}-p${port}${YYYYMMDD-HHMM}.json' in cwd
     --jsonfile|-oj <jsonfile>     additional output to the specified flat JSON file or directory, similar to --logfile
     --json-pretty                 additional JSON structured output of findings to a file '${NODE}-p${port}${YYYYMMDD-HHMM}.json' in cwd
     --jsonfile-pretty|-oJ <jsonfile>  additional JSON structured output to the specified file or directory, similar to --logfile
     --csv                         additional output of findings to CSV file '${NODE}-p${port}${YYYYMMDD-HHMM}.csv' in cwd or directory
     --csvfile|-oC <csvfile>       additional output as CSV to the specified file or directory, similar to --logfile
     --html                        additional output as HTML to file '${NODE}-p${port}${YYYYMMDD-HHMM}.html'
     --htmlfile|-oH <htmlfile>     additional output as HTML to the specified file or directory, similar to --logfile
     --out(f,F)ile|-oa/-oA <fname> log to a LOG,JSON,CSV,HTML file (see nmap). -oA/-oa: pretty/flat JSON.
                                   "auto" uses '${NODE}-p${port}${YYYYMMDD-HHMM}'. If fname if a dir uses 'dir/${NODE}-p${port}${YYYYMMDD-HHMM}'
     --hints                       additional hints to findings
     --severity <severity>         severities with lower level will be filtered for CSV+JSON, possible values <LOW|MEDIUM|HIGH|CRITICAL>
     --append                      if (non-empty) <logfile>, <csvfile>, <jsonfile> or <htmlfile> exists, append to file. Omits any header
     --outprefix <fname_prefix>    before  '${NODE}.' above prepend <fname_prefix>


Options requiring a value can also be called with '=' e.g. testssl.sh -t=smtp --wide --openssl=/usr/bin/openssl <URI>.
<URI> always needs to be the last parameter.


userid@somehost:~ % 

Details are in the man page.

You are free to check any port – supposed there's any SSL enabled service (TCP) listening. For the service HTTP you can also supply a full URL. STARTTLS services are those which are plaintext and need some kind of an upgrade command to speak TLS. This is very protocol (see difference between IMAP and SMTP) specific. A STARTTLS check with testssl.sh would be invoked with testssl.sh -t pop3 pop.o2online.de:110. Other examples:
testssl.sh --starttls smtp <smtphost>.<tld>:587 
testssl.sh --starttls ftp <ftphost>.<tld>:21
testssl.sh -t xmpp <jabberhost>.<tld>:5222 
testssl.sh -t xmpp --xmpphost <XMPP domain> <jabberhost>.<tld>:5222 
testssl.sh --starttls imap <imaphost>.<tld>:143
The ports in those examples above are just the standard ports. Also here you're free to check any port. //refactor those, see e.g. https://content-security-policy.com/unsafe-hashes/ or just drop tis shit
If you just want to check the mail exchangers of a domain, do it like this: testssl.sh --mx google.com (make sure port 25 outbound is not blocked by your firewall) – see left hand side picture.

With the output option --wide you get where possible a wide output with hexcode of the cipher, OpenSSL cipher suite name, key exchange (with DH size), encryption algorithm, encryption bits size and maybe the RFC cipher suite name.

If you have the file mapping-rfc.txt in the same directory as testssl.sh it displays in the wide outputs also the corresponding RFC style cipher name. If you don't want this, you need to move mapping-rfc.txt away. Another thing: If you want to find out what local ciphers you have and print them pretty, use testssl.sh -V. Ever wondered what hexcode a cipher is? testssl.sh -V x14 lets you search for the hexcode x14. For hexcodes: If you just specify 14 instead of x14 you will get all ciphers returned which have 14 as a low, middle or high byte. For ciphers: You can also supply a word case pattern, e.g. testssl.sh -V CBC puts out every locally available cipher having the Cipher Block Chaining mode in its name.

testssl.sh -x <pattern> <URI> does the same as testssl.sh -V, it only checks the matched pattern at the server, so e.g. testssl.sh -x ECDH google.com checks google.com for ECDH ciphers (and lists also not available ones at the target), testssl.sh -x DHE smtp.posteo.de:465 does a similar thing for the TLS enabled SMTP service.

testssl.sh --file <myfile> let you do mass testing. The syntax of the file is very easy: one cmdline per line. Use comment signs # as you like, blank lines will be skipped, EOF signals the end of the file – what else? ;-).

You can also specify a proxy since version 2.6: testssl.sh --proxy=<proxyhost>:<proxyport> <your_other_cmds_here> will sneak the openssl and bash sockets requests e.g. out of our corporate environment. Proxy authentication is not supported and the port and protocol has to be allowed in the proxy.

Another neat feature: testssl.sh --header <URI> gives you some information on the HTTP header and marks security features in green (see upper black picture on the right hand side), not so good headers range from yellow over brown to red. It also allows you to fingerprint proxies, see lower black picture.


Changes

3.2




       ... branch is stable github only. Changes relative to 3.0 see changelog.

3.0






















Misc

Feedback, bugs and contributions are welcome! Currently there's one git repo at https://github.com/testssl/testssl.sh. Here @ https://testssl.sh you will always find the latest stable version.

Bugs (and fixes) as well as other PRs can by filed at the git repo or send me a mail to dirk aet testssl dot sh.

I post all significant updates on Mastodon or Bluesky. There was a personal twitter account which is deprecated as we don't like nazis or hate speech.  


Services:  If you need a scanning service or consulting get in touch with me..


Imprint