name: performing-ssl-tls-audit
description: >-
Comprehensive SSL/TLS configuration auditing using testssl.sh, sslyze, and
nmap NSE scripts. Covers cipher suite evaluation, protocol version checks,
vulnerability scanning (BEAST, POODLE, Heartbleed, ROBOT), HSTS validation,
and compliance reporting against Mozilla and NIST guidelines.
domain: cybersecurity
subdomain: cryptography
tags:
- tls
- ssl
- audit
- testssl
- sslyze
- cipher-suites
- hsts
- vulnerability-scanning
version: "1.0"
author: defconxt
license: AGPL-3.0
metadata:
mitre-attack: ["T1557.002"]
Performing SSL/TLS Audit
Overview
TLS misconfigurations expose services to downgrade attacks, MITM interception,
and data exfiltration. This skill covers systematic auditing of TLS endpoints
using industry-standard tools, evaluating against Mozilla's TLS guidelines
and NIST SP 800-52 Rev. 2.
Prerequisites
| Requirement |
Install |
| testssl.sh |
git clone https://github.com/drwetter/testssl.sh.git |
| sslyze |
pip install sslyze |
| nmap |
apt install nmap |
| OpenSSL 3.x |
apt install openssl |
| Python 3.10+ |
For agent tooling |
Key Concepts
Full Audit with testssl.sh
# Comprehensive scan
testssl.sh --severity HIGH --wide example.com:443
# Check specific vulnerabilities
testssl.sh --vulnerable example.com:443
# Check cipher suites only
testssl.sh --cipher-per-proto example.com:443
# JSON output for automation
testssl.sh --jsonfile results.json example.com:443
# Check STARTTLS services
testssl.sh --starttls smtp mail.example.com:587
sslyze Scanning
# Regular scan with certificate info
sslyze --regular example.com
# Check for specific vulnerabilities
sslyze --heartbleed --openssl_ccs --robot example.com
# JSON output
sslyze --json_out results.json example.com
# Scan multiple targets
sslyze --targets_in targets.txt --regular
nmap TLS Scripts
# Enumerate TLS ciphers
nmap --script ssl-enum-ciphers -p 443 example.com
# Check for known vulnerabilities
nmap --script ssl-heartbleed,ssl-poodle,ssl-ccs-injection -p 443 example.com
# Certificate information
nmap --script ssl-cert -p 443 example.com
Known TLS Vulnerabilities
| Vulnerability |
CVE |
Impact |
Test |
| Heartbleed |
CVE-2014-0160 |
Memory disclosure |
testssl.sh --heartbleed |
| POODLE |
CVE-2014-3566 |
SSLv3 padding oracle |
testssl.sh --poodle |
| BEAST |
CVE-2011-3389 |
CBC IV attack (TLS 1.0) |
testssl.sh --beast |
| ROBOT |
CVE-2017-13099 |
RSA padding oracle |
testssl.sh --robot |
| CRIME |
CVE-2012-4929 |
TLS compression leak |
testssl.sh --crime |
| DROWN |
CVE-2016-0800 |
SSLv2 cross-protocol |
testssl.sh --drown |
| Ticketbleed |
CVE-2016-9244 |
Session ticket leak |
testssl.sh --ticketbleed |
Mozilla TLS Profiles
| Profile |
Min TLS |
Ciphers |
Use Case |
| Modern |
TLS 1.3 only |
TLS 1.3 suites only |
New services, modern clients |
| Intermediate |
TLS 1.2 |
ECDHE+AESGCM, ECDHE+CHACHA |
General purpose |
| Old |
TLS 1.0 |
Broad set |
Legacy compatibility only |
Workflow
- Scope — Identify all TLS endpoints (ports 443, 8443, 993, 995, etc.)
- Scan — Run testssl.sh and sslyze against each endpoint
- Evaluate — Compare against Mozilla Intermediate or Modern profile
- Classify — Rate findings by severity (Critical/High/Medium/Low)
- Report — Document with specific remediation per finding
- Verify — Re-scan after remediation to confirm fixes
Verification
| Check |
Method |
| TLS 1.2+ only |
testssl.sh shows no SSLv3, TLS 1.0, TLS 1.1 |
| No weak ciphers |
No RC4, DES, NULL, EXPORT, anon ciphers |
| No known vulns |
testssl.sh --vulnerable reports all green |
| HSTS enabled |
curl -sI shows Strict-Transport-Security header |
| Strong key exchange |
Only ECDHE or DHE (≥2048-bit) |
| Certificate valid |
Not expired, correct SAN, trusted chain |
References
1---2name: performing-ssl-tls-audit3description: <!-- Copyright (c) 2026 defconxt. All rights reserved. -->4---5
6<!-- Copyright (c) 2026 defconxt. All rights reserved. -->
7<!-- Licensed under AGPL-3.0 — see LICENSE file for details. -->
8---
9name: performing-ssl-tls-audit
10description: >-
11 Comprehensive SSL/TLS configuration auditing using testssl.sh, sslyze, and
12 nmap NSE scripts. Covers cipher suite evaluation, protocol version checks,
13 vulnerability scanning (BEAST, POODLE, Heartbleed, ROBOT), HSTS validation,
14 and compliance reporting against Mozilla and NIST guidelines.
15domain: cybersecurity
16subdomain: cryptography
17tags:
18 - tls
19 - ssl
20 - audit
21 - testssl
22 - sslyze
23 - cipher-suites
24 - hsts
25 - vulnerability-scanning
26version: "1.0"
27author: defconxt
28license: AGPL-3.0
29metadata:
30 mitre-attack: ["T1557.002"]
31---
32
33# Performing SSL/TLS Audit
34
35## Overview
36
37TLS misconfigurations expose services to downgrade attacks, MITM interception,
38and data exfiltration. This skill covers systematic auditing of TLS endpoints
39using industry-standard tools, evaluating against Mozilla's TLS guidelines
40and NIST SP 800-52 Rev. 2.
41
42## Prerequisites
43
44| Requirement | Install |
45|---|---|
46| testssl.sh | `git clone https://github.com/drwetter/testssl.sh.git` |
47| sslyze | `pip install sslyze` |
48| nmap | `apt install nmap` |
49| OpenSSL 3.x | `apt install openssl` |
50| Python 3.10+ | For agent tooling |
51
52## Key Concepts
53
54### Full Audit with testssl.sh
55
56```bash
57# Comprehensive scan
58testssl.sh --severity HIGH --wide example.com:443
59
60# Check specific vulnerabilities
61testssl.sh --vulnerable example.com:443
62
63# Check cipher suites only
64testssl.sh --cipher-per-proto example.com:443
65
66# JSON output for automation
67testssl.sh --jsonfile results.json example.com:443
68
69# Check STARTTLS services
70testssl.sh --starttls smtp mail.example.com:587
71```
72
73### sslyze Scanning
74
75```bash
76# Regular scan with certificate info
77sslyze --regular example.com
78
79# Check for specific vulnerabilities
80sslyze --heartbleed --openssl_ccs --robot example.com
81
82# JSON output
83sslyze --json_out results.json example.com
84
85# Scan multiple targets
86sslyze --targets_in targets.txt --regular
87```
88
89### nmap TLS Scripts
90
91```bash
92# Enumerate TLS ciphers
93nmap --script ssl-enum-ciphers -p 443 example.com
94
95# Check for known vulnerabilities
96nmap --script ssl-heartbleed,ssl-poodle,ssl-ccs-injection -p 443 example.com
97
98# Certificate information
99nmap --script ssl-cert -p 443 example.com
100```
101
102### Known TLS Vulnerabilities
103
104| Vulnerability | CVE | Impact | Test |
105|---|---|---|---|
106| Heartbleed | CVE-2014-0160 | Memory disclosure | `testssl.sh --heartbleed` |
107| POODLE | CVE-2014-3566 | SSLv3 padding oracle | `testssl.sh --poodle` |
108| BEAST | CVE-2011-3389 | CBC IV attack (TLS 1.0) | `testssl.sh --beast` |
109| ROBOT | CVE-2017-13099 | RSA padding oracle | `testssl.sh --robot` |
110| CRIME | CVE-2012-4929 | TLS compression leak | `testssl.sh --crime` |
111| DROWN | CVE-2016-0800 | SSLv2 cross-protocol | `testssl.sh --drown` |
112| Ticketbleed | CVE-2016-9244 | Session ticket leak | `testssl.sh --ticketbleed` |
113
114### Mozilla TLS Profiles
115
116| Profile | Min TLS | Ciphers | Use Case |
117|---|---|---|---|
118| Modern | TLS 1.3 only | TLS 1.3 suites only | New services, modern clients |
119| Intermediate | TLS 1.2 | ECDHE+AESGCM, ECDHE+CHACHA | General purpose |
120| Old | TLS 1.0 | Broad set | Legacy compatibility only |
121
122## Workflow
123
1241. **Scope** — Identify all TLS endpoints (ports 443, 8443, 993, 995, etc.)
1252. **Scan** — Run testssl.sh and sslyze against each endpoint
1263. **Evaluate** — Compare against Mozilla Intermediate or Modern profile
1274. **Classify** — Rate findings by severity (Critical/High/Medium/Low)
1285. **Report** — Document with specific remediation per finding
1296. **Verify** — Re-scan after remediation to confirm fixes
130
131## Verification
132
133| Check | Method |
134|---|---|
135| TLS 1.2+ only | testssl.sh shows no SSLv3, TLS 1.0, TLS 1.1 |
136| No weak ciphers | No RC4, DES, NULL, EXPORT, anon ciphers |
137| No known vulns | testssl.sh `--vulnerable` reports all green |
138| HSTS enabled | `curl -sI` shows `Strict-Transport-Security` header |
139| Strong key exchange | Only ECDHE or DHE (≥2048-bit) |
140| Certificate valid | Not expired, correct SAN, trusted chain |
141
142## References
143
144- [testssl.sh GitHub](https://github.com/drwetter/testssl.sh)
145- [sslyze Documentation](https://nabla-c0d3.github.io/sslyze/documentation/)
146- [Mozilla SSL Configuration Generator](https://ssl-config.mozilla.org/)
147- [NIST SP 800-52 Rev. 2](https://csrc.nist.gov/publications/detail/sp/800-52/rev-2/final)