Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Interpret testssl-inspector normalized findings, recommend remediations, and tie evidence back to SCF anchor controls plus SOC 2 / NIST 800-53 r5 / PCI DSS 4.0.1 / ISO 27002:2022 equivalents derived from SCF crosswalks.
.claude/skills/grcengclub-testssl-inspector-expert/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 17% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 10% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 106% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 13% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 25% | 0% |
Use this skill when reviewing findings produced by /testssl-inspector:scan. The connector wraps testssl.sh and emits v1 Findings against tls_endpoint resources; this skill translates those into remediation advice an engineer can act on and audit evidence a reviewer can sign off.
Findings live at ~/.cache/claude-grc/findings/testssl-inspector/<run_id>.json. Each document covers one TLS endpoint:
resource.type = "tls_endpoint", resource.id = "<host>:<port>", resource.uri = "https://<host>:<port>/" for HTTPS or resource.uri = "starttls+<proto>://<host>:<port>/" for STARTTLS scansevaluations[] — one entry per (control_framework, control_id, testssl finding) tuplefindings[] — narrative roll-up for CVEs and critical results (cap 50 per doc)metadata.target, metadata.effective_target, metadata.host, metadata.port, metadata.starttls — the original input, the port-expanded target actually scanned, the parsed host/port, and the STARTTLS protocol when applicableMost fails fall into one of five families. The remediation pattern is the same within each family.
IDs: SSLv2, SSLv3, TLS1, TLS1_1. SCF anchors: CRY-01 (Use of Cryptographic Controls), CRY-03 (Transmission of Sensitive Data), NET-09 (Session Authenticity). SCF crosswalk fans these out at scan time — typical resolved targets include NIST SC-08, SC-08(01), SC-08(02), SC-13, SC-23, SI-07(06); SOC 2 CC6.1, CC6.7; PCI 4.2, 4.2.1, 4.2.1.2, 8.3.2; ISO 27002 5.14, 8.24, 8.26.
Remediation:
ELBSecurityPolicy-TLS-1-2-2017-01 or newer. NGINX: ssl_protocols TLSv1.2 TLSv1.3;. Apache: SSLProtocol -all +TLSv1.2 +TLSv1.3.IDs: cipher_negotiated, cipherlist_* (NULL, aNULL, EXPORT, LOW, 3DES_IDEA, OBSOLETED), RC4, std_* variants. SCF anchors: CRY-01.2 (Algorithm Selection), CRY-05 (Cryptographic Protection). Resolved targets typically include NIST SC-13, SC-28, SC-28(01); SOC 2 CC6.1, CC6.7; PCI 3.5, 3.5.1.2, 3.5.1.3, 8.3.2; ISO 27002 8.24.
Remediation:
TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384.(EC)DHE should be disabled in 2026.IDs: cert_expirationStatus, cert_notAfter, cert_signatureAlgorithm, cert_keySize, cert_chain_of_trust, OCSP_*, CT, DNS_CAArecord. SCF anchor: CRY-08 (Public Key Infrastructure). Resolved targets include NIST SC-12 (Key Establishment & Management) and SC-17 (PKI Certificates); SOC 2 CC6.1.
Remediation depends on the specific failure:
CAA DNS record naming your authorized issuer(s) — defense against unauthorized certificate issuance.IDs: heartbleed, CCS, ticketbleed, ROBOT, secure_renego, secure_client_renego, CRIME_TLS, BREACH, POODLE_SSL, fallback_SCSV, SWEET32, FREAK, DROWN, LOGJAM, BEAST, LUCKY13, RC4, winshock. SCF anchors: VPM-01 (Vulnerability & Patch Management), VPM-06 (Vulnerability Scanning). Resolved targets include NIST SI-02, SI-03, RA-05; SOC 2 CC7.1 and CC3.x POFs; PCI 6.3, 6.3.1, 6.3.3, 11.3, 11.3.1; ISO 27002 8.8.
These are not configuration tuning — they're vulnerability remediation. Treat any non-OK finding here as an audit-tracked vuln with a remediation deadline. Most are addressed by:
IDs: HSTS, HSTS_preload, HSTS_time, HPKP, cookie_secure, cookie_httponly, banner_*, security_headers. SCF anchors: CRY-03 (Transmission of Sensitive Data), WEB-03 (Web App Hardening), NET-09 (Session Authenticity). Resolved targets include NIST SC-08, SC-08(01), SC-07(17), SC-23; PCI 4.2, 6.4, 6.4.1.
Remediation:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload and submit to the HSTS preload list (hstspreload.org) for the strongest posture.Secure or HttpOnly: fix the application — set both flags on every session cookie.For an audit, the auditor wants three things per finding:
~/.cache/claude-grc/findings/testssl-inspector/<run_id>.json).collected_at field).Workflow:
bash/testssl-inspector:scan --target=auth.example.com --target=api.example.com # Inspect the resulting findings file. Attach it to the audit evidence packet # alongside the remediation tickets opened for each fail. /grc-engineer:gap-assessment SOC2,PCI-DSS --sources=testssl-inspector # Aggregates testssl evaluations with your other connector outputs into a # control-by-control posture view.
id and reasoning so we can refine the mapping table.scan.md. If a user asks about SP 800-52 Rev. 2 specifically, point them at the relevant framework plugin instead.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 6,537 | 7,358 | +13% | 1 | 1 | 0% | 948 | 2,875 | +203% | 0 | 0 | — |
case-02 | fail→pass | 24,385 | 16,735 | -31% | 1 | 1 | 0% | 4,000 | 4,682 | +17% | 0 | 0 | — |
case-03 | fail→pass | 28,279 | 16,515 | -42% | 1 | 1 | 0% | 4,848 | 5,334 | +10% | 0 | 0 | — |
case-04 | pass→pass | 10,908 | 7,619 | -30% | 1 | 1 | 0% | 1,965 | 3,618 | +84% | 0 | 0 | — |
case-05 | pass→pass | 4,421 | 5,047 | +14% | 1 | 1 | 0% | 697 | 3,116 | +347% | 0 | 0 | — |
case-06 | pass→pass | 9,231 | 6,400 | -31% | 1 | 1 | 0% | 1,561 | 3,210 | +106% | 0 | 0 | — |
case-07 | pass→pass | 31,340 | 9,475 | -70% | 1 | 1 | 0% | 3,023 | 4,045 | +34% | 0 | 0 | — |
case-08 | pass→pass | 12,002 | 7,837 | -35% | 1 | 1 | 0% | 1,866 | 3,527 | +89% | 0 | 0 | — |
case-09 | pass→pass | 14,764 | 10,162 | -31% | 1 | 1 | 0% | 2,396 | 3,939 | +64% | 0 | 0 | — |
case-10 | pass→pass | 15,155 | 6,553 | -57% | 1 | 1 | 0% | 2,271 | 3,154 | +39% | 0 | 0 | — |
case-11 | pass→pass | 11,616 | 7,892 | -32% | 1 | 1 | 0% | 1,929 | 3,560 | +85% | 0 | 0 | — |
case-12 | pass→pass | 14,470 | 11,533 | -20% | 1 | 1 | 0% | 2,057 | 3,978 | +93% | 0 | 0 | — |
case-13 | fail→pass | 10,102 | 7,513 | -26% | 1 | 1 | 0% | 1,718 | 3,531 | +106% | 0 | 0 | — |
case-14 | pass→pass | 11,366 | 9,541 | -16% | 1 | 1 | 0% | 1,698 | 3,743 | +120% | 0 | 0 | — |
case-15 | fail→pass | 14,175 | 2,413 | -83% | 1 | 1 | 0% | 2,351 | 2,660 | +13% | 0 | 0 | — |
case-16 | fail→pass | 14,908 | 2,823 | -81% | 1 | 1 | 0% | 2,103 | 2,637 | +25% | 0 | 0 | — |
case-17 | pass→pass | 16,665 | 6,301 | -62% | 1 | 1 | 0% | 2,527 | 3,285 | +30% | 0 | 0 | — |
case-18 | pass→pass | 11,289 | 10,597 | -6% | 1 | 1 | 0% | 1,985 | 4,052 | +104% | 0 | 0 | — |
case-19 | pass→pass | 14,270 | 7,075 | -50% | 1 | 1 | 0% | 2,154 | 3,403 | +58% | 0 | 0 | — |
case-20 | fail→fail | 14,844 | 10,734 | -28% | 1 | 1 | 0% | 2,880 | 4,226 | +47% | 0 | 0 | — |
case-21 | pass→pass | 12,204 | 8,769 | -28% | 1 | 1 | 0% | 1,999 | 3,756 | +88% | 0 | 0 | — |
case-22 | fail→pass | 15,989 | 7,476 | -53% | 1 | 1 | 0% | 1,263 | 3,542 | +180% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +27 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.