summaryrefslogtreecommitdiffstats
path: root/t/51_badssl.com.t
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xt/51_badssl.com.t147
1 files changed, 147 insertions, 0 deletions
diff --git a/t/51_badssl.com.t b/t/51_badssl.com.t
new file mode 100755
index 0000000..40b6e91
--- /dev/null
+++ b/t/51_badssl.com.t
@@ -0,0 +1,147 @@
+#!/usr/bin/env perl
+
+use strict;
+use Test::More;
+use Data::Dumper;
+use JSON;
+
+my $tests = 0;
+
+my (
+ $out,
+ $json,
+ $found,
+);
+# OK
+pass("Running testssl.sh against badssl.com to create a baseline (may take 2~3 minutes)"); $tests++;
+my $okout = `./testssl.sh -S -e --freak --logjam --drown --rc4 --sweet32 --breach --winshock --crime --jsonfile tmp.json --color 0 badssl.com`;
+my $okjson = json('tmp.json');
+unlink 'tmp.json';
+cmp_ok(@$okjson,'>',10,"We have more then 10 findings"); $tests++;
+
+# Expiration
+pass("Running testssl against expired.badssl.com"); $tests++;
+$out = `./testssl.sh -S --jsonfile tmp.json --color 0 expired.badssl.com`;
+like($out, qr/Chain of trust\s+NOT ok \(expired\)/,"The chain of trust should be expired"); $tests++;
+like($out, qr/Certificate Validity \(UTC\)\s+expired/,"The certificate should be expired"); $tests++;
+$json = json('tmp.json');
+unlink 'tmp.json';
+$found = 0;
+foreach my $f ( @$json ) {
+ if ( $f->{id} eq "cert_expirationStatus" ) {
+ $found = 1;
+ like($f->{finding},qr/^expired/,"Finding reads expired."); $tests++;
+ is($f->{severity}, "CRITICAL", "Severity should be CRITICAL"); $tests++;
+ last;
+ }
+}
+is($found,1,"We had a finding for this in the JSON output"); $tests++;
+
+# Self signed and not-expired
+pass("Running testssl against self-signed.badssl.com"); $tests++;
+$out = `./testssl.sh -S --jsonfile tmp.json --color 0 self-signed.badssl.com`;
+unlike($out, qr/Certificate Validity \(UTC\)s+expired/,"The certificate should not be expired"); $tests++;
+$json = json('tmp.json');
+unlink 'tmp.json';
+$found = 0;
+foreach my $f ( @$json ) {
+ if ( $f->{id} eq "cert_expirationStatus" ) {
+ $found = 1;
+ like($f->{finding},qr/days/,"Finding doesn't read expired."); $tests++;
+ isnt($f->{severity}, "CRITICAL", "Severity should be OK, MEDIUM or HIGH"); $tests++;
+ last;
+ }
+}
+is($found,1,"We had a finding for this in the JSON output"); $tests++;
+
+like($out, qr/Chain of trust.*?NOT ok.*\(self signed\)/,"Chain of trust should fail because of self signed"); $tests++;
+$found = 0;
+foreach my $f ( @$json ) {
+ if ( $f->{id} eq "cert_chain_of_trust" ) {
+ $found = 1;
+ like($f->{finding},qr/^.*self signed/,"Finding says certificate cannot be trusted."); $tests++;
+ is($f->{severity}, "CRITICAL", "Severity should be CRITICAL"); $tests++;
+ last;
+ }
+}
+is($found,1,"We had a finding for this in the JSON output"); $tests++;
+
+like($okout, qr/Chain of trust[^\n]*?Ok/,"Chain of trust should be ok"); $tests++;
+$found = 0;
+foreach my $f ( @$okjson ) {
+ if ( $f->{id} eq "cert_chain_of_trust" ) {
+ $found = 1;
+ like($f->{finding},qr/passed/,"Finding says certificate can be trusted."); $tests++;
+ # is($f->{finding},"^.*passed.*","Finding says certificate can be trusted."); $tests++;
+ is($f->{severity}, "OK", "Severity should be OK"); $tests++;
+ last;
+ }
+}
+is($found,1,"We had a finding for this in the JSON output"); $tests++;
+
+# Wrong host
+#pass("Running testssl against wrong.host.badssl.com"); $tests++;
+#$out = `./testssl.sh -S --jsonfile tmp.json --color 0 wrong.host.badssl.com`;
+#unlike($out, qr/Certificate Expiration\s+expired\!/,"The certificate should not be expired"); $tests++;
+#$json = json('tmp.json');
+#unlink 'tmp.json';
+#$found = 0;
+#foreach my $f ( @$json ) {
+# if ( $f->{id} eq "expiration" ) {
+# $found = 1;
+# unlike($f->{finding},qr/^Certificate Expiration.*expired\!/,"Finding should not read expired."); $tests++;
+# is($f->{severity}, "ok", "Severity should be ok"); $tests++;
+# last;
+# }
+#}
+#is($found,1,"We had a finding for this in the JSON output"); $tests++;
+
+# Incomplete chain
+pass("Running testssl against incomplete-chain.badssl.com"); $tests++;
+$out = `./testssl.sh -S --jsonfile tmp.json --color 0 incomplete-chain.badssl.com`;
+like($out, qr/Chain of trust.*?NOT ok\s+\(chain incomplete\)/,"Chain of trust should fail because of incomplete"); $tests++;
+$json = json('tmp.json');
+unlink 'tmp.json';
+$found = 0;
+foreach my $f ( @$json ) {
+ if ( $f->{id} eq "cert_chain_of_trust" ) {
+ $found = 1;
+ like($f->{finding},qr/^.*chain incomplete/,"Finding says certificate cannot be trusted."); $tests++;
+ is($f->{severity}, "CRITICAL", "Severity should be CRITICAL"); $tests++;
+ last;
+ }
+}
+is($found,1,"We had a finding for this in the JSON output"); $tests++;
+
+# TODO: RSA 8192
+
+# TODO: CBC
+#pass("Running testssl against cbc.badssl.com"); $tests++;
+#$out = `./testssl.sh -e -U --jsonfile tmp.json --color 0 cbc.badssl.com`;
+#like($out, qr/Chain of trust.*?NOT ok\s+\(chain incomplete\)/,"Chain of trust should fail because of incomplete"); $tests++;
+#$json = json('tmp.json');
+#unlink 'tmp.json';
+#$found = 0;
+#foreach my $f ( @$json ) {
+# if ( $f->{id} eq "cert_chain_of_trust" ) {
+# $found = 1;
+# like($f->{finding},qr/^All certificate trust checks failed.*incomplete/,"Finding says certificate cannot be trusted."); $tests++;
+# is($f->{severity}, "CRITICAL", "Severity should be CRITICAL"); $tests++;
+# last;
+# }
+#}
+#is($found,1,"We had a finding for this in the JSON output"); $tests++;
+
+
+done_testing($tests);
+
+sub json($) {
+ my $file = shift;
+ $file = `cat $file`;
+ unlink $file;
+ return from_json($file);
+}
+
+
+# vim:ts=5:sw=5:expandtab
+