cert-info.sh is a lightweight Bash utility for fetching and displaying SSL/TLS certificate details for one or more domains.
It supports both human-readable CSV output and structured JSON output, with options to override IP resolution globally or per-domain.
- Retrieve SSL/TLS certificate details including:
- Issuer
- Serial number
- Expiration date (UTC, ISO 8601 format)
- Subject
- Subject Alternative Names (SANs)
- Output in:
- CSV format (default)
- JSON format (
-j)
- Resolve domains automatically via Google DNS over HTTPS
- Override IP address resolution:
- Globally (all domains use same IP)
- Per-domain
- Read domains from:
- Command-line arguments
- Standard input
The following commands must be installed and available in PATH:
curl– for DNS resolution via HTTPSjq– for JSON parsingopenssl– for retrieving and parsing certificates
./cert-info.sh [options] domain1 domain2 ...
./cert-info.sh [options] -| Option | Description |
|---|---|
-j |
Output results in JSON format |
--ip ip[:port] |
Override IP for all domains (default port 443 if omitted) |
--ip domain=ip[:port] |
Override IP for a specific domain |
- |
Read domain names from standard input |
./cert-info.sh example.com github.com./cert-info.sh -j example.com github.comecho "example.com" | ./cert-info.sh -cat <<EOF | ./cert-info.sh -
example1.com
example2.com
example3.com
EOF./cert-info.sh --ip 1.2.3.4:8443 example.com github.com./cert-info.sh --ip example.com=1.2.3.4 github.com example.com./cert-info.sh --ip example.com=1.2.3.4 --ip 2.3.4.5 example.com github.comdomain,"issuer",serial,not_after,san,"subject"
Example:
example.com,"C=US, O=Let's Encrypt, CN=R3",04F8F3A12D35C9B7B9,2025-08-10T14:32:45Z,www.example.com:example.com,"CN=example.com"
[
{
"domain": "example.com",
"issuer": "C=US, O=Let's Encrypt, CN=R3",
"serial": "04F8F3A12D35C9B7B9",
"not_after": "2025-08-10T14:32:45Z",
"subject": "CN=example.com",
"san": "www.example.com:example.com"
}
]- Default port is
443unless overridden. - On macOS, the script uses
date -j -ffor parsing certificate expiration dates. - Errors (e.g., unresolved domains) are reported in:
- JSON mode → objects with
"error"fields - CSV mode → warnings printed to
stderr
- JSON mode → objects with