epi052/feroxbuster · error

:SSL

Error message

:SSL: {e}

What it means

make_request classifies reqwest errors after a failed call. When the error is identified as a certificate error (is_certificate_error), it is logged, counted as a Certificate error in stats, and bailed with the ':SSL: {e}' prefix so callers and users can immediately recognize TLS-level failures.

Solutions

  1. Re-run with --insecure (-k) to disable certificate verification
  2. Install the host's CA certificate into the system trust store
  3. Verify the certificate with openssl s_client -connect host:443 to see the actual defect
  4. If scanning through a proxy, configure the proxy's CA as trusted

Example fix

// before
feroxbuster -u https://self-signed.internal
// after
feroxbuster -u https://self-signed.internal --insecure
Defensive patterns

Strategy: try-catch

Validate before calling

echo | openssl s_client -connect target:443 -servername target 2>/dev/null | openssl x509 -noout -dates -subject

Try / catch

// run with --insecure when self-signed certs are expected:
// feroxbuster -u https://host --insecure
// or pre-validate TLS and skip such hosts

Prevention

When it happens

Trigger: reqwest returns an error where is_certificate_error(&e) is true - expired/invalid/self-signed certificates, hostname mismatch, unknown CA - during make_request (used by check_for_updates, process_response, extract requests, and normal scans).

Common situations: Scanning internal hosts with self-signed certs, MITM proxies presenting their own certificate, expired certificates, or SNI/hostname mismatches.

Understand the failure class

Related errors


AI-assisted analysis of epi052/feroxbuster@1f595dab5c (2026-09-13). Data as JSON: /api/errors/8089ded2e9a67f15. Report an issue: GitHub.

Appendix: source

Thrown at src/utils.rs:311

                    let report = create_report_string(
                        &msg_status,
                        method,
                        "-1",
                        "-1",
                        "-1",
                        &fancy_message,
                        output_level,
                    );

                    send_command!(tx_stats, AddError(Redirection));

                    ferox_print(&report, &PROGRESS_PRINTER)
                };
            } else if is_certificate_error(&e) {
                log::warn!("Certificate error detected: {e}");
                send_command!(tx_stats, AddError(Certificate));
                bail!(":SSL: {e}");
            } else if e.is_connect() {
                send_command!(tx_stats, AddError(Connection));
            } else if e.is_request() {
                send_command!(tx_stats, AddError(Request));
            } else {
                send_command!(tx_stats, AddError(Other));
            }

            log::warn!("Error while making request: {e}");
            bail!("{}", e)
        }
        Ok(resp) => {
            log::trace!("exit: make_request -> {resp:?}");
            send_command!(tx_stats, AddStatus(resp.status()));
            Ok(resp)
        }
    }
}

View on GitHub (pinned to 1f595dab5c)